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

Как принудительно обновить js-скрипт у клиента?

Наверное, вопрос глупый, но актуальный. Страница загружается и несколько часов целиком не перезагружается, только AJAX.
Но что делать, если нужно обновить скрипт? Я сейчас делаю так:
В ответе сервера ajax встроена текущая версия скрипта. Если она не сходится с прописанной в самом скрипте, то перенаправляю на страницу вида index.php?v2

Чувствую, что делаю фигню. Ведь при изменении нужно править ТРИ файла: скрипт, php (который запрашиваю по ajax) и клиентскую страницу, где прописываю

<script src='js/scripts.js?v2'></script>
  • Вопрос задан
  • 2010 просмотров
Подписаться 2 Простой 5 комментариев
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Варианты:
1. не париться. Посидит несколько часов с устаревшей версией - разве это критично?
2. если изменения в новой версии идут в компании с breaking changes в backend, то есть смысл версии API закладывать в пути: скрипт версии x.y будет обращаться к бэкенду по адресу api/x.y/method Так параллельно смогут жить и работать несколько версий скрипта+API.
3. нынешний вариант не так и плох для некоторых случаев. Особенно, если ajax запросы в меру регулярны.
4. на таймер раз в X секунд поставить вызов серверного метода проверки версии, и при обнаружении обновления сохранять данные и перегружать страницу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@LiguidCool
Вы можете отдавать JS скрипт с помощью PHP. Подумайте об этом.
<script src='js/scripts.php'></script>
Но не забудьте верно установить хедеры. Кроме того в них же можно установить время кеширования скрипта (например вообще его отключить).
Если же случилась смена версии, то просто делаете перезагрузку страницы.
Ответ написан
Комментировать
@BitRouter
Посмотрите RequireJS, с его помощью можно контролить не только скрипты
+ можно такую схемку:

<script src='js/scripts.php' id="dataID"></script>
и прописать небольшую функцию которая будет брать хэш / get / post параметр и по нему обновлять скрипт найдя его по ID

PS опять же можно использовать id можно использовать свободный атрибут - не принципиально
Ответ написан
Ваш ответ на вопрос

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

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