我有一个AJAX调用,它根据简单的标准参数(如一年中的月份)从不断变化的数据库中返回值。在IE中,此函数返回缓存的数据,这是它永远不应该的。我监控了服务器端,客户端没有联系它。
现在,我的标题问题已经以不同的方式提出,很多时候已经在这里。前两个解决方案是:
config.omniauth :myauth, 'CKEY', 'CSEC', strategy_class => OmniAuth::Strategies::Myauth
事情是,cache: false
不起作用,至少在我的应用程序中不起作用。另一方面,传递一个唯一的字符串来防止缓存,似乎是一个快速修复黑客。我不喜欢它。那么在ajax调用上阻止缓存的正确方法是什么?
在防止缓存方面无效的Ajax调用:
cache: false
在调用发生之前,我也试过自己调用$.getJSON("myURL", {
json : jsonDataObject,
cache: false
}).success(function(data) {
//do something with data
});
,但是没有效果......
答案 0 :(得分:10)
首先,您认为在cache
电话中将$.getJSON()
设置为false的方式不正确。您已将密钥/值对传递给服务器,因此请求网址将显示为site.com/resource?cache=false
。
您需要使用$.ajax()
方法提出请求,以便将cache
选项实际设置为false
。然而,所有这一切都是你所谓的快速修复黑客"。它将_={current_timestamp}
添加到查询字符串中,以便不会缓存请求。
$.ajax({
url: 'myurl',
type: 'GET',
dataType: 'json',
data: jsonDataObject,
cache: false, // Appends _={timestamp} to the request query string
success: function(data) {
// data is a json object.
}
});
在我看来,这不是一个快速修复或黑客攻击,它是确保您从服务器获得新响应的正确方法。
如果您不是每次都这样做,那么您可以使用自己的包装函数:
$.getJSONUncached = function (url, data, successCallback) {
return $.ajax({
url: url,
type: 'GET',
dataType: 'json',
data: data,
cache: false, // Appends _={timestamp} to the request query string
success: successCallback
});
};
然后,您只需将$.getJSON()
的电话号码替换为$.getJSONUncached()
答案 1 :(得分:0)
请告知我们您使用的是IE8,请从jquery文档中查看以下内容
缓存(默认值:true,false,对于dataType'脚本'和' jsonp') 类型:布尔值 如果设置为false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为false只能与HEAD和GET请求一起正常工作。它的工作原理是附加" _ = {timestamp}"到GET参数。 其他类型的请求不需要该参数,但在IE8中,当对已经由GET请求的URL进行POST时,该参数除外。
答案 2 :(得分:0)
使用
$.ajaxSetup({ cache: false });
您的请求中不需要虚假缓存。将此代码用作头脑中的脚本。它将解决您的缓存问题。代码应该,
<script>$.ajaxSetup({ cache: false });</script>
答案 3 :(得分:0)
缓存有HTML META TAG ..我不确定但可能对防止缓存有用。
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>