如何在收到http响应代码304后绕过缓存的内容?

时间:2011-05-11 17:29:56

标签: php ajax http prototypejs

我有一个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'部分完成,但我还不知道如何。

1 个答案:

答案 0 :(得分:0)

请再次查看原始相关网站http://codeigniter.com/wiki/AJAX_for_CodeIgniter/,因为它有关于htis的示例。