2013-04-15 2 views
1

Итак, я запустил сайт, на котором много javascript и ajax. Я понимаю, как заставить пользователей обновлять свой браузер when the browser loads. Но что произойдет, если мне нужно, чтобы они обновили свой браузер после того, как они загрузили сайт?Принудительно (или спросите красиво), чтобы обновить браузер

Я хочу изменить ajax, который подается клиенту, чтобы ускорить работу, но это вызовет ошибки для пользователей, которые еще не обновили свой браузер.

Единственное решение, которое я могу придумать, заключается в том, что, когда требуется новая версия файла JavaScript, на сайте используется всплывающее окно, которое просит пользователей принудительно обновлять свои браузеры. (Это не будет реально исправлять текущую версию, но предотвратит будущие проблемы.)

Ненавижу использовать всплывающее окно для чего-то, что я мог бы сделать автоматически. Есть ли лучший способ принудительного обновления для клиента?

+1

Не уверен, что вы получаете. Вся цель Ajax - загрузить контент в dom *** без *** обновления страницы. Если вы хотите обновить страницу, почему бы просто не сделать HTTP-запрос на получение или отправку, без ajax? – Ryan

+0

Ссылка, которую вы дали, предоставляет несколько способов разбить кеш при необходимости. Используйте один из них вместо обновления страницы. Вы, кажется, беспокоитесь о новых «версиях» ресурсов, которые можно получить с обновлением страницы. Изменение URL-адреса - это правильный способ обмануть браузер для его обработки или правильно настроить ваш сервер. – Ian

+0

@ryan Возможно, я плохо это формулирую. Пользователи делают много аякс-запросов на сервер. Но если поведение сервера меняется, каждый, кто делает запросы на сервер, внезапно имеет сломанную страницу и не указывает, почему страница сломана. Если они обновят свой браузер, сайт будет исправлен, но пользователи этого не знают. Я хочу знать, есть ли хороший способ обновить страницу, если сервер и клиентская сторона не синхронизированы. – Holtorf

ответ

1
window.location.href = "http://example.com" 

заменяет текущую страницу тем, на что указывает http://example.com.

+0

Установка '.href' не заменяет страницу. Он переходит на новую страницу. Вызов 'window.location.replace' заменит страницу. – Ian

+0

Где разница? – Oswald

+0

Согласно странице ['location' MDN] (https://developer.mozilla.org/en-US/docs/DOM/window.location#Methods) разница между' replace' и 'assign' (такая же, как установка 'href' напрямую) заключается в том, что' replace' не создает новую запись истории в списке «Назад/Вперед» пользователя. – apsillers

1

Звучит так, как будто у вас возникли проблемы с вашим JavaScript, получающим обновленную версию данных, которые он загружает с помощью методов Ajax, это правильно? Например, если два вызова Ajax пытаются загрузить 'data.txt', тогда второй вызов просто использует кешированную версию.

Возможно, вам также не удалось загрузить новые версии с вашим скриптом.

Путь вокруг обеих этих проблем состоит в том, чтобы добавить произвольно сгенерированную строку запроса в источник скрипта и источник Ajax.

Например, сделать один скрипт, который загружает основной сценарий, как это:

/* loader1.js */ 
document.write('<script src="mainjavascript.js?.rand=', Math.random(), '"></script>'); 

И в вашем HTML, просто сделать

<script src="loader1.js"></script> 

Тот же метод работает для JavaScript Ajax запросов, а также , Предполагая, что «клиент» новый XMLHttpRequest() объекта, и был правильно установлен с функцией readystatechange и так далее, то вы просто добавьте ту же строку запроса, как это:

request = client.open('GET', 'data.txt?.rand=' + Math.random(), true); 
request.send(); 

Вы можете быть используя библиотеку для выполнения ваших запросов Ajax, и поэтому это еще проще. Просто укажите URL-адрес данных как 'data.txt?.rand=' + Math.random(), а не просто «data.txt»

+2

Я думаю, что проблема OP заключается в том, что его серверный API меняется. Например, представьте себе 'getData.php', который использовался для возврата JSON для объекта данных, но после обновления он возвращает массив объектов. Любой старый клиентский скрипт, запущенный после обновления, все еще ожидает объект, и он сломается, когда ему передается массив. Пользователь должен обновить страницу, чтобы он мог получить новый клиентский скрипт, который знает, как обрабатывать массив объектов. – apsillers

+0

Верно, и это первое решение, которое я предложил (первые два раздела примерного кода). –

Смежные вопросы