@prokopov-vi

Как правильно подключить виджет через ajax?

Добрый день, в процессе разработки столкнулся с одной проблемой.

При нажатии на кнопку отправляется ajax запрос и возвращает инициализированный виджет. Проблема в том, что в возвращаеться все без ошибки, но не работает js и css не подключается. использую в виджете сторонний плагин.
Результат - бесконечно крутящийся спиннер, хотя должно быть поле с тегами.
d0d545797df94442968209def25b4da8.png

Так делаю запрос:

$.ajax('/user/employee-manage/load-tags', {
                    type: 'post',
                    data: {
                        'ids' : employeesChecked
                    },
                    success: function (response) {
                        console.log(response);
                      $('.panel-employee-tag').append(response)
                      
                    }
                });


Контроллер возвращает результат в формате JSON:

public function actionLoadTags()
{
      return TagsPanelWidget::widget();
}


Шаблон виджета:

<?php
use kartik\select2\Select2;
?>
<?= Select2::widget([
    'name' => 'color_2',
    'value' => ['red', 'green'],
    'maintainOrder' => true,
    'options' => ['placeholder' => 'Select a employees ...', 'multiple' => true],
    'pluginOptions' => [
        'tags' => true,
    ],
]);
?>


Результат возвращается в таком виде:
<span id="parent-s2-togall-w0" style="display:none"><span id="s2-togall-w0" class="s2-togall-button s2-togall-select"><span class="s2-select-label"><i class="glyphicon glyphicon-unchecked"></i>Выбрать все</span><span class="s2-unselect-label"><i class="glyphicon glyphicon-check"></i>Отменить выбор</span></span></span><div class="kv-plugin-loading loading-w0">&nbsp;</div><select id="w0" class="form-control" name="color_2[]" multiple size="4" data-s2-options="s2options_ae5051fd" data-krajee-select2="select2_11baaf42" style="display:none">
<option value="red" selected>red</option>
<option value="green" selected>green</option>
</select>


Я подозреваю, что проблема в том, что не подгружает js в самом плагине.
Как возможно исправить эту проблему ?
  • Вопрос задан
  • 655 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Самый простой способ это возвращать не сам виджет а view с ним и пользоваться, специально для этого сделанным методом renderAjax
public function actionLoadTags()
{
return $this->renderAjax('view_file_name');
}
Тогда подключатся все зависимости, при чем без дублей, рендер не использует layout и все будет хорошо. Ну а в view файле рендерить сам виджет, а может быть еще что-то.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы