2010-09-17 4 views
2

Я работаю над эсфорой с калькулятором, чтобы рассчитать ваш кредит. Мне нужно немного свежее представление об этом ... Представьте себе эту ситуацию:Проблема с кешированием JS/AJAX

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

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

Я попытался с помощью мета-теги, чтобы предотвратить кэширование, я сказал JQuery, чтобы не кэш запроса СТОЛБ и даже в моем ответчику, у меня есть несколько заголовков, которые говорят - не кэшировать. Тем не менее данные POST становятся кэшированными, и я понятия не имею, как отключить его или обновить или что-то еще ... Когда я смотрю на заголовки, которые возвращаются с данными json, заголовок истекает, установлен на год 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"); 

Это получает обратно (от поджигатель):

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 

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

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

Edit:

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

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

+0

'header (« Истекает: понедельник, 26 июля 2099 05:00:00 GMT »);« это очень похоже на меня, как будто вы устанавливаете время истечения срока действия именно для того, что вы видите в Firebug, и вы «не устанавливая его на несколько лет в прошлом. – Matt

+0

lol, вы были правы, но это все еще не решило мою проблему. Когда я щелкнул назад, данные все еще были кэшированы ... – realshadow

ответ

-3

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

+3

Если вы собираетесь принять свой собственный ответ, вы должны указать, каково было ваше решение. Ваш вопрос был довольно конкретным, но этот ответ чрезвычайно общий и лишенный деталей. – James

0

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

+0

Это одна из вещей, которые я сделал :) Но это тоже не работает. Потому что вся проблема в том, когда вы нажмете кнопку «Назад», я отредактирую свой вопрос – realshadow

+0

Проблема может заключаться в вашем JavaScript-коде, проверьте свои переменные. –

1

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

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

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

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

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