如何在jQuery中为getJSON设置cache false?


80

getJSON用来从服务器端获取结果,但面临浏览器缓存问题。我希望缓存为假。我在getJSON致电之前尝试使用此功能。

 $.ajaxSetup({
                cache: false
            })

但是我没有得到预期的结果。它仍然显示旧结果。

我还确定了其他解决方案,例如使用,.ajax但我真的不想使用它。


Answers:


128

您的代码只需要一个触发器就可以启用。

这将允许您在以后的所有ajax中禁用缓存

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

希望能帮助到你 :)


7
该套之全局,这是不好的,可以影响你的程序中的其他Ajax调用该需要缓存
VSYNC

@helloChris-这是jQuery的一个很好的解释“在文档“就绪”之前,无法安全地操纵页面。jQuery为您检测到这种就绪状态。$(document).ready()中包含的代码只会运行一次文档对象模型(DOM)页面已准备就绪,可以执行JavaScript代码。” 阅读有关API的更多信息
bonesnatch

7
@bonesnatch大多数jQuery代码都需要它,但是,该设置与DOM无关。据我所知,当您进行该设置时,文档可以处于任何状态,并且没有什么不同。没有页面操作。
克里斯(Chris)2015年

为什么需要触发器?请解释为什么它不能像原始海报那样使用?
符文·耶普森

2
更美观的使用方式;$ .ajaxSettings.cache = false;
MustafaÇakıroğlu'16

83

您可以使用以下任一方法,这将全局禁用缓存:

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

或者,而不是$.getJSON,仅针对此类请求禁用缓存:

$.ajax({
    cache: false,
    url: "/path/to.json",
    dataType: "json",
    success: function(data) {
        ...
    }
});

50

semente和bonesnatch的答案是正确的,但是如果您想使用$ .getJSON和其他地方,请利用它的缓存功能(您不想为所有调用将缓存设置为false),但是您只想为一次调用,您可以将时间戳添加到$ .getJSON()的data属性中。通过向请求的查询字符串添加唯一值,请求将始终是唯一的,并且不会被浏览器缓存-您将始终获取最新数据。

长版:

var ts = new Date().getTime();
var data = {_: ts};
var url = '/some/path.json';

$.getJSON(url, data);

多合一版本:

$.getJSON('/some/path', {_: new Date().getTime()});

两者都导致以下请求:

/some/path.json?_=1439315011130 

其中末尾的数字是代码被调用时的时间戳,因此将始终是唯一的。


2
我想说的是迄今为止所提出问题的最佳解决方案。您无需更改JavaScript,无需更改全局配置,只需将一个简单的额外参数传递给函数即可。
克里斯

如果您使用的是Azure CDN,则不是解决方案。如果您发送其他参数,Azure将返回缓存的对象
levye
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.