【问题标题】:How to get around the cached content refresh after http response code 304 is received?收到http响应码304后如何绕过缓存内容刷新?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我不确定我应该在那个网址上查看什么?
猜你喜欢
  • 2013-12-11
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2020-12-14
  • 2011-10-19
  • 2016-05-29
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多