2012-06-30 3 views
2

У меня есть небольшая проблема при использовании history.js.History.js с ответом сервера Ajax

Я пытаюсь достичь github, как исходный браузер, используя history.js + ajax с dojotoolkit.

Он работает, но у меня небольшая проблема на стороне сервера

Я использую PHP, и если какая-то страница загрузки с history.js PushState, сервер сначала проверит тип запроса, «это он АЯКС? ». если это ajax, то сервер будет возвращать только запрошенную часть страницы, а если сервер не вернет полную страницу.

Проблема заключается в том, что если я закрою браузер, а затем снова открою его, на странице будет отображаться только страница ajax, возвращаемая сервером, а не полная страница, поскольку она все еще известна как запрос ajax.

Как я могу решить эту проблему?

+0

Как сервер знает, что это запрос ajax? После повторного открытия браузера на сервере должен быть URL-адрес из поля адреса. Обычным является проверка заголовка 'X-REQUESTED-WITH' для значения' 'xmlhttprequest '' - если это то, что делает сервер, у вас не должно быть проблем. – jgivoni

ответ

1

У меня была такая же проблема, и я потратил некоторое время на ее изучение. Оказывается, когда вы восстанавливаете вкладку из истории или возвращаетесь на страницу с другой страницы, исходная страница обычно восстанавливается из кеша браузера (изначально я думал, что он делает тот же самый запрос на сервер, включая заголовки).

Если ваш последний запрос к URL-адресу был AJAX, и состояние было нажато, тогда ответ AJAX кэшируется в браузере, и позже этот кешированный ответ отображается вам.

Решение для этого - отключить кеширование запросов AJAX, отправив соответствующие заголовки. Это то, что я использую в PHP, чтобы убедиться, что ни один браузер не будет кэшировать мой ответ:

header("Expires: Sun, 19 Nov 1978 05:00:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Pragma: no-cache");