【问题标题】:jQuery Ajax Call - delete cached valuesjQuery Ajax 调用 - 删除缓存的值
【发布时间】:2012-04-15 20:15:30
【问题描述】:

简短:我是新手,但我尽量直接问,但请尽量原谅我 ;)

我一直在寻找解决我的问题的方法和两个主题:

  1. Prevent browser caching of jQuery AJAX call result
  2. Can you clear jquery ajax cache?

靠近并展示一些出色的解决方案,不幸的是它们不适用于我的情况。

我需要使用 jQuery.ajax() 调用向 IP 摄像机发送 CGI 命令。我得到并且经常改变结果。所以我不能让浏览器缓存结果!我知道并经常读到这个选项(参见主题 1。):

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});

但这在我的情况下不起作用,因为相机 CGI 命令结构不适用于附加到命令的时间戳。因此,我会得到一个错误,而不是得到我需要的答案。

之后我想,我可以采用 jQuery 代码来删除设置选项“缓存:false”时附加的时间戳。但是在我阅读了一些 cmets 之后(参见主题 2。):

所以如果你使用cache: false,jQuery只需添加一个额外的参数 到具有当前时间的 URL。它使本地浏览器成为 URL 另一个,因为它可能在本地缓存中,它转发 向服务器请求。仅此而已。

所以我发现这对我也没有帮助。

主题 2 的一个解决方案是在服务器响应标头中添加等于“max-age=0”的“Cache-Control”,这会关闭本地兑现。但同样它对我来说根本不起作用,因为我无法访问或无法访问 IP 摄像机的软件。

我认为一种解决方案是停用或删除该特定调用的缓存。 另一种解决方案可能是通过任何其他方式停止缓存。

那么有没有人知道,当我连续两次调用 ajax 事件时,如何让网络浏览器停止使用缓存的答案? (重新加载网站会有所帮助,但在这种情况下也是不行的)。

提前感谢所有答案,如果您需要更多信息以使我的问题更清楚,请随时提问。

问候, 咻咻咻

【问题讨论】:

  • 那么你要什么,一个网址?回应是什么?是流还是什么?目前尚不清楚为什么需要清除缓存。
  • 我使用camera build in CGI命令来获取设置的状态。例如,我问“红外 LED 是打开还是关闭” - 'param.cgi?cmd=getinfrared' - 答案是一个变量:现在,当我使用另一个 CGI 命令 'param.cgi?cmd=setinfrared&-infraredstat=off' 更改它并重新打开站点时,它不会显示当前状态,因为由于缓存,我仍然会得到 IR LED 的旧结果关闭。

标签: jquery cache-control


【解决方案1】:

尝试在每个请求中添加一个随机参数。 param.cgi?cmd=getinfrared&fixme=21EC2020-3AEA-1069-A2DD-08002B30309D

为每个请求生成一个新的 GUID,这将使浏览器认为它是第一次请求新资源。 CGI 软件应该忽略附加参数...

【讨论】:

  • 我试过了,还是不行! CGI 命令有点严格。添加任何额外的、非预期的参数(如时间戳或 GUID)都会导致错误。
【解决方案2】:

您没有指定您使用的服务器,所以我不确定这是否适合您。

你可以做的是使用.htaccess

这应该适用于所有 Unix 类型的服务器,但您需要完全访问权限才能安装它。

<FilesMatch "\.(php|cgi|pl|htm)$">
ExpiresActive Off
Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
</FilesMatch>

这是一个关于如何在 IIS 上使用 Htaccess 的线程

http://forums.iis.net/t/1151878.aspx

【讨论】:

    猜你喜欢
    • 2011-05-02
    • 2011-09-28
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多