Проблема с кэшированием в браузере JS / AJAX - PullRequest
2 голосов
/ 17 сентября 2010

Я работаю в интернет-магазине с калькулятором для расчета вашего кредита.Мне нужно немного свежего понимания этого ... представьте себе ситуацию:

  1. Пользователь нажимает на одну из кнопок, чтобы выполнить запрос POST (jQuery) и заполнить необходимые данные.
  2. Пользователь нажимает добавляет в корзину и переходит в корзину
  3. Пользователь нажимает назад кнопка (браузер)

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

Я пытался использовать метатеги для предотвращения кеширования, я сказал jquery не кешировать запрос POST и даже в моем ответчикеУ меня есть несколько заголовков, которые говорят - НЕ КЕШИТЬ .Тем не менее, данные POST кэшируются, и я понятия не имею, как их отключить или обновить, или что-то еще ... Когда я смотрю на заголовки, которые возвращаются с данными json, заголовок expires устанавливается в2099 год, хотя я и сказал, что это должен быть год из прошлого.Кроме того, я действительно не знаю, что может быть причиной этой проблемы.

Вот заголовки, установленные в ответчике и что возвращается:

 header("Expires: Mon, 26 Jul 1999 05:00:00 GMT" );
 header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
 header("Cache-Control: no-cache, must-revalidate" );
 header("Pragma: no-cache" );
 header("Content-type: text/x-json");

Это возвращается (из firebug):

    Date         Fri, 17 Sep 2010 08:39:38 GMT
    X-Powered-By PHP/5.1.6
    Connection Keep-Alive
    Content-Length 126
    Pragma         no-cache
    Last-Modified Fri, 17 Sep 2010 08:39:38GMT
    Server         Apache
    Content-Type text/x-json
    Cache-Control no-cache, must-revalidate
    Expires         Mon, 26 Jul 2099 05:00:00 GMT

Примечание: когда я отключаю кеш в настройках браузера, он работает как чудо.

Любые идеи приветствуются!

Редактировать:

Iпробовал манекен несколько часов назад, но это не решает его.Проще говоря, вся проблема в том, что когда пользователь нажимает кнопку «Назад», страница не будет обновляться, но ее чтение из кэша или, по крайней мере, данные, полученные из ajax, кэшируются и заполняются.

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

Ответы [ 3 ]

1 голос
/ 18 сентября 2010

Если вы хотите обрабатывать кнопки «назад / вперед», один из способов - использовать плагин bbq для jQuery, который способен изменять часть # в URL.

Таким образом, вы сможете подключаться к событиям «назад / вперед» и иметь полный контроль над тем, что и когда выполняется, запуская любой Ajax-запрос, который вам нужен.

Это означает, что вам придется изменить концепцию вашего потока страниц - нет прямой публикации на сервер, только через ajax, + рендеринг на стороне клиента через некоторый механизм шаблонов.

Это несколько новая тенденция, например, Google с мгновенным поиском.

0 голосов
/ 26 октября 2010

Решите это с небольшим взломом, так как это похоже на проблему с чистым браузером.

0 голосов
/ 17 сентября 2010

Добавить фиктивный параметр для всех ваших запросов ajax '&t='+new Date().getTime(); Это обеспечит отправку нового запроса каждый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...