如何在JQuery中为getJSON设置缓存false?

Abh*_*nav 76 jquery jquery-ui getjson browser-cache

我使用getJSON从服务器端获取结果,但面临浏览器缓存问题.我希望缓存是假的.我在getJSON调用之前尝试使用它.

 $.ajaxSetup({
                cache: false
            })
Run Code Online (Sandbox Code Playgroud)

但我没有得到预期的结果.它仍然显示旧的结果.任何帮助将不胜感激.

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

小智 123

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

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

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)

  • 这会将其设置为全局,这很糟糕,并且会影响程序中的其他ajax调用****需要缓存 (7认同)
  • @bonesnatch大多数jQuery代码都需要,但是,该设置与DOM无关.据我所知,当您进行该设置时,该文档可能处于任何状态,并且它不会产生任何影响.没有页面操作. (7认同)
  • 更美观的使用方式;$ .ajaxSettings.cache = false; (2认同)

sem*_*nte 79

你可以使用这个,这将全局禁用缓存:

$(document).ready(function() {
  $.ajaxSetup({ cache: false });
});
Run Code Online (Sandbox Code Playgroud)

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

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


Tri*_*hST 44

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

长版:

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

$.getJSON(url, data);
Run Code Online (Sandbox Code Playgroud)

一体化版本:

$.getJSON('/some/path', {_: new Date().getTime()});
Run Code Online (Sandbox Code Playgroud)

两者都会产生以下要求:

/some/path.json?_=1439315011130 
Run Code Online (Sandbox Code Playgroud)

最后的数字是代码被调用的时刻的时间戳,因此总是唯一的.

  • 我会说到目前为止问题的最佳解决方案.您不需要更改您的javascript,也不需要更改全局配置只是一个简单的额外参数传递给函数. (2认同)