如何在jQuery.get调用中设置cache:false

时间:2012-01-12 19:55:46

标签: jquery caching

jQuery.get()jQuery.ajax()来电的简写。但是当我在cache:false调用的数据中设置.get()时,发送给服务器的是一个名为cache的参数,其值为false。虽然我的意图是将数据的时间戳发送到服务器以防止缓存,如果我在jQuery.ajax数据中使用cache: false会发生这种情况。如何在不重写jQuery.get调用jQuery.ajax调用或使用

的情况下完成此操作
$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});

更新:感谢大家的答案。你们都是对的。但是,我希望有一种方法可以让get调用知道你不想缓存,或者将该值发送到底层的.ajax(),这样它就知道如何处理它。

我是。寻找除了目前已确定的三种方式之外的第四种方式:

  1. 通过ajaxSetup

  2. 全局完成
  3. 使用.ajax调用而不是.get调用

  4. 通过在.get调用中添加一个包含时间戳的新参数来手动执行此操作。

  5. 我只是认为这个功能应该内置到.get调用中。

7 个答案:

答案 0 :(得分:96)

自己添加参数。

$.get(url,{ "_": $.now() }, function(rdata){
  console.log(rdata);
});

从jQuery 3.0开始,您现在可以执行此操作:

$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});

答案 1 :(得分:64)

我认为你必须使用AJAX方法,它允许你关闭缓存:

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});

答案 2 :(得分:35)

对我而言,正确的做法是列出的方式。 ajaxajaxSetup。如果您确实想使用get而不使用ajaxSetup,那么您可以创建自己的参数并为其指定当前日期/时间的值。

但是我会质疑你不使用其他方法的动机。

答案 3 :(得分:7)

根据JQuery文档,.get()仅将urldata(内容),dataTypesuccess回调作为其参数。你真正想要做的是在发送之前修改jqXHR对象。使用.ajax(),可以使用beforeSend()方法完成此操作。但由于.get()是一种捷径,它不允许它。

.ajax()电话转换为.get()电话应该相对容易。毕竟,.get()只是.ajax()的一个子集,因此您可以使用.ajax()的所有默认值(当然,beforeSend()除外)。

修改

::看看Jivings的回答::

哦,是的,忘记了cache参数!虽然beforeSend()对于添加其他标头很有用,但内置的cache参数在这里要简单得多。

答案 4 :(得分:2)

使用“下方法”

在jQuery.get调用中设置cache:false

使用新的Date().getTime(),,这将避免冲突,除非您在同一毫秒内发生多个请求。

以下将阻止所有未来的AJAX请求被缓存,无论您使用哪种jQuery方法($ .get,$ .ajax等)

$.ajaxSetup({ cache: false });

答案 5 :(得分:1)

请注意,回调语法为deprecated

  

弃用通知

     

jqXHR.success(),jqXHR.error()和jqXHR.complete()回调   jQuery 1.5中引入的方法在jQuery 1.8中已弃用。至   为最终删除代码做好准备,使用jqXHR.done(),   jqXHR.fail()和jqXHR.always()代替。

这是使用promise界面

的现代化解决方案
$.ajax({url: "...", cache: false}).done(function( data ) {
    // data contains result
}).fail(function(err){
    // error
});

答案 6 :(得分:0)

我在游戏中很晚,但这可能对其他人有所帮助。 我用$ .get遇到了同样的问题,我并不想盲目地关闭缓存,我也不喜欢时间戳补丁。 所以经过一些研究后我发现你可以简单地使用$ .post而不是$ .get,它不使用缓存。就那么简单。 :)