我有一个php应用程序,它使用prototypejs与另一个php脚本进行ajax轮询,检查是否有新内容或内容是否已更新。如果内容未更改,则返回http响应代码304。
这一切都运行正常,但我发现浏览器似乎刷新了内容,尽管发送了响应代码304。看来这些数据来自浏览器缓存,其中包含上一个成功响应代码200的内容(当轮询器发现更改数据时)。
http rfc指出:“如果状态代码是304(未修改),则缓存使用存储在缓存条目中的实体 - 身体作为此传出响应的实体主体”。
有没有办法解决这个问题?因为尽管没有数据被更改,但每次返回代码304时人们仍会看到轻微的闪烁。我可以使用响应代码410(Gone),它没有这种奇怪的行为,但我不认为这样做。
我当前的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'部分完成,但我还不知道如何。