Задать вопрос

Как заново подгрузить файл с JavaScript при повторном AJAX-рендере одного и того же view-файла, содержащего ссылку на данный JavaScript-файл?

Сделал модальное окно, его содержимое обернул в <div id='modalContent'>. Внутри этого блока реализовал навигацию между тремя страницами (view-файлами):
view1
7a138ecf6c764ae39552958d0f9d4b93.JPG
view2
a38e5310dbe3473c8362767039e460db.JPG
view3
af20596c98ab4b1da69fe4f3af5ccb65.JPG
Переход вперед по страницам сделан при нажатии на элементы (кнопки или выбор элемента из списка), в обратную - с помощью элементов вверху страницы. Для перехода с одной страницы на другую формируется ajax запрос к определенному экшену контроллера, а возвращается renderAjax, которые view-файлом заменяет данные внутри блока <div id='modalContent'>.

В отображаемых view-шках присутствуют скрипты JavaScript, подключенные как непосредственно:
$script = <<< JS
$('.res').click(function(event) {        
    $.ajax({
        type: "GET",
        url: "load-resources?kind_of_res_id="+$(this).data("action"),
        success: function(data) {
            $("#modalContent").html(data)
        }
    })
});
JS;
$this->registerJs($script);


так и в виде файла, вот таким образом:
$this->registerJsFile(
    '/basic_yii/web/scripts/resource/computer.js',
    ['depends'=>'app\assets\AppAsset']
);


Проблема заключается в том, что когда любой view-файл рендерится первый раз, скрипты из подключенного к этой вьюшке файла работают нормально (подключаются GET-запросом через ajax, это видно в отладчике браузера), а если, например, сделать переход Ajax'ом на предыдущий view (ткнуть сверху) и опять загрузить текущий (ткнуть в форму), локальные скрипты работают, а скрипты из файла уже нет (и файл повторно не подгружается, нет GET-запроса, хотя элемент <script> с адресом этого сайта на странице присутствует).

В чем может быть проблема? Как заставить файл подгружаться снова при возврате на страницу?
  • Вопрос задан
  • 928 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 2
@Quieteroks
php программист
Не пытайтесь в Yii2 использовать свои варианты подгрузки динамического контента. Есть же pjax, который сам обо всем позаботится. Почитайте и попробуйте его прикрутить для своей цели.
Ответ написан
@parazitl2 Автор вопроса
Вопрос решился следующим образом:

<?php
$this->registerJsFile(
    '/basic_yii/web/scripts/resource/computer.js?n=' . uniqid(),
    ['depends'=>'app\assets\AppAsset']
);
?>


До этого пробовал $.ajaxSetup({cache: false});, не помогало. А вышеупомянутый код заставляет файл загружаться в кэш заново, все работает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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