У меня есть приложение php, которое использует prototypejs для опроса ajax с другим сценарием php, чтобы проверить, есть ли новый контент или контент был обновлен.Он возвращает HTTP-код ответа 304, если содержимое не изменилось.
Это все работает нормально, однако я только что обнаружил, что браузеры, похоже, обновляют содержимое, хотя код ответа 304 был отправлен.Похоже, эти данные поступают из кэша браузера, который был заполнен содержимым последнего успешного кода ответа 200 (когда опросчик обнаружил измененные данные).
http rfc заявляет: «Если код состояния равен 304(Не изменено), кэш использует тело объекта, сохраненное в записи кэша, в качестве тела объекта этого исходящего ответа ".
Есть ли способ обойти это?Несмотря на то, что никакие данные не были изменены, люди все еще видят легкое мерцание каждый раз, когда возвращается код 304.Я мог бы использовать код ответа 410 (Унесенные), который не имеет такого странного поведения, но я не думаю, что это способ сделать это.
Мой текущий вызов ajax - простой код прототипа:
function showProcessing() {
if(Ajax.activeRequestCount > 0)
document.getElementById('inProgress2').style.display = 'none';
document.getElementById('inProgress').style.display = 'inline';
}
function hideProcessing () {
if(Ajax.activeRequestCount <= 0)
document.getElementById('inProgress').style.display = 'none';
document.getElementById('inProgress2').style.display = 'inline';
}
Ajax.Responders.register({
onCreate: showProcessing,
onComplete: hideProcessing
});
Так что, если это поведение можно отключить с помощью прототипа, то, вероятно, это то, что нужно сделать в части 'onComplete', но я понятия не имею, как.