How to update widget with pjax in modal window in yii2
active-form, ajax, php, pjax, yii2
Solution
Managed without $.pjax, just added this
$("#risks-solutions_order-sortable").append('<li data-id="'+data.id+'" data-key="'+data.id+'" draggable="true">'+data.solution+'</li>');
$("ul[id$='sortable'").trigger('sortupdate');
$('#risks-solutions_order-sortable').sortable( "refreshPositions" );
in ajax success and everything is ok! :)
Problem
I have two ActiveForms in a modal window and after submitting first form, I need to update second one and stay in modal. As I understand pjax can handle that, but can't get it to work properly. In _form.php I have ActiveForm with widget which should be updated: ``` <?php $form = ActiveForm::begin([ 'id'=>'form', 'enableAjaxValidation'=>true, ]); ?> <?= Html::activeHiddenInput($riskModel, 'id', ['value' => $riskModel->id]) ?> <?php Pjax::begin([ 'id' => 'solutionItems', ]) ?> //need to update this widget <?= $form->field($riskModel, 'solutions_order')->widget(SortableInput::classname(), [ 'items' => $riskModel->getSolutionList(), 'hideInput' => false, 'options' => ['class'=>'form-control', 'readonly'=>false] ]); ?> <?php Pjax::end() ?> <div class="form-group"> <?= Html::submitButton($riskModel->isNewRecord ? 'Create' : 'Update', ['class' => $riskModel->isNewRecord ? 'btn btn-success' : 'btn btn-primary', 'onclick' => 'return isConnected()']) ?> </div> <?php ActiveForm::end(); ?> ``` And then I have Ajax request which returns success if new solution is created: ``` $.ajax({ url: form.attr('action'), type: 'post', data: form.serialize(), success: function (data) { if (data && data.result == 1) { $.pjax.reload({container:'#solutionItems'}); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { $("#error").html("Kļūda! Neizdevās pievienot ierakstu.").fadeIn('highlight','', 2000, callbackError()); $("#solutions-solution").val(""); } }); ``` But ``` $.pjax.reload({container:'#solutionItems'}); ``` closes the modal. If I put the returned value in a div, then ajax works properly and the modal is not closing.