【发布时间】:2011-05-11 17:29:55
【问题描述】:
我有一个 php 应用程序,它使用prototypejs 与另一个 php 脚本进行 ajax 轮询,以检查是否有新内容或内容是否已更新。如果内容没有改变,它会返回一个 304 的 http 响应码。
这一切都很好,但是我刚刚发现浏览器似乎刷新了内容,即使发送了响应代码 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”部分完成,但我不知道如何做。
【问题讨论】:
-
让您的 ajax 响应处理程序检查 HTTP 状态代码,如果它是 304,则根本不更改任何内容?
-
我不知道该怎么做,因为 javascript/ajax 不是我的强项之一 :( 我刚刚在我的原始帖子中添加了一小段原型 js 代码。
-
我刚搬到 jquery,这似乎工作得更好。
标签: php ajax http prototypejs