82

我正在使用getJSON从服务器端获取结果但面临浏览器缓存问题。我希望缓存为假。我在getJSON打电话之前尝试使用它。

 $.ajaxSetup({
                cache: false
            })

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

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

4

3 回答 3

131

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

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

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

希望能帮助到你 :)

于 2012-12-03T08:25:48.310 回答
86

您可以使用任何一个,这将全局禁用缓存:

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

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

$.ajax({
    cache: false,
    url: "/path/to.json",
    dataType: "json",
    success: function(data) {
        ...
    }
});
于 2013-09-18T18:54:49.613 回答
51

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

长版:

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 

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

于 2015-08-11T17:52:29.463 回答