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

如何在jQuery.get调用中设置缓存:false,jquery,caching,Jquery,Caching,jQuery.get()是带有get调用的jQuery.ajax()的缩写。但是,当我在.get()调用的数据中设置cache:false时,发送到服务器的是一个名为cache的参数,其值为false。而我的目的是向服务器发送带有数据的时间戳,以防止缓存,如果在jQuery.ajax数据中使用cache:false,就会发生这种情况。如何在不重写jQuery.get调用到jQuery.ajax调用或使用 $.ajaxSetup({ // Disable caching of AJAX r

jQuery.get()
是带有get调用的
jQuery.ajax()
的缩写。但是,当我在
.get()
调用的数据中设置
cache:false
时,发送到服务器的是一个名为cache的参数,其值为false。而我的目的是向服务器发送带有数据的时间戳,以防止缓存,如果在jQuery.ajax数据中使用
cache:false
,就会发生这种情况。如何在不重写jQuery.get调用到jQuery.ajax调用或使用

$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});
更新:谢谢大家的回答。你们都是对的。但是,我希望有一种方法可以让get调用知道您不想缓存,或者将该值发送到底层的.ajax(),以便它知道如何处理它

我是a。寻找第四种方法,而不是目前已确定的三种方法:

  • 通过ajaxSetup进行全局操作

  • 使用.ajax调用而不是.get调用

  • 手动执行此操作,方法是向.get调用中添加一个包含时间戳的新参数


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

    对我来说,正确的方法应该是列出的方法。
    ajax
    ajaxSetup
    。若您确实想使用
    get
    而不使用
    ajaxSetup
    ,那个么您可以创建自己的参数,并将当前日期/时间的值赋予它


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

    自己添加参数

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

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

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

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

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

    根据JQuery文档,
    .get()
    仅将
    url
    数据
    (内容)、
    数据类型
    成功
    回调作为其参数。这里真正需要做的是在发送jqXHR对象之前修改它。使用
    .ajax()
    ,这是通过
    beforeSend()方法完成的。但是由于
    .get()
    是一种快捷方式,因此它不允许这样做

    不过,将
    .ajax()
    调用切换到
    .get()
    调用应该相对容易。毕竟,
    .get()
    只是
    .ajax()
    的一个子集,因此您可能可以使用
    .ajax()
    的所有默认值(当然,除了
    beforeSend()

    编辑:

    当前位置查看Jivings的回答:


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

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

    设置缓存:jQuery.get调用中的false使用下面的方法

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

    无论使用哪种jQuery方法($.get、$.AJAX等),以下内容都将阻止缓存将来的所有AJAX请求


    请注意,回调语法是:

    弃用通知书

    jqXHR.success()、jqXHR.error()和jqXHR.complete()回调函数 从jQuery1.8开始,jQuery1.5中引入的方法就不再推荐了。到 使用jqXHR.done()为最终删除代码做好准备, jqXHR.fail()和jqXHR.always()

    这里是一个使用
    promise
    界面的现代化解决方案

    $.ajax({url: "...", cache: false}).done(function( data ) {
        // data contains result
    }).fail(function(err){
        // error
    });
    

    显示完整的
    get()
    示例?我喜欢将文件的日期/时间与页面一起传递(假设我使用的是服务器端脚本语言),然后将其与页面请求一起作为querystring参数传递。我这样做的原因是它允许缓存,除非页面实际发生了更改。使用cache:false会在ajax/json请求中附加一个时间戳,例如{“get”:“modified”}&&=1394836303603,这破坏了我的API请求。由于时间戳被隐藏在jQuery文档中,所以花了太多的时间才弄清楚是什么添加了时间戳。不使用cache:false,只需添加您自己的时间戳,假设您的API不关心您是否添加了未知参数。类似于:{“get”:“modified”,“timestamp”:“1394836303603”}这还可以让您更好地控制缓存的项目和不缓存的项目。为什么不想使用$.ajaxSetup?这是一个直截了当的方法,可以完成任务。谢谢。$.now()是new Date()的缩写。getTime()。您现在还可以执行
    Date.now()
    。或者,由于我们有jquery,只需使用我们所拥有的:这应该是公认的答案。。。因为OP专门询问
    $.get()
    @SerjSagan我不同意这一点,因为在jquery3.0之前,更好的选择是使用$.ajax。在3.0中,$.get也可以接受选项对象。:)IE9的缓存,似乎真的不喜欢。get@Ross如果你按照我的回答将
    cache
    设置为
    false
    ,那就不行了。3年后,我只损失了半天的时间problem@Joel哈哈,很高兴我能帮上忙:)六年后,我因同样的问题损失了半天……值得注意的是,在我的特定应用程序中,我在ajaxSetup中使用cache:false(我的大多数调用都是针对有效负载的json端点),然后我使用$.ajax(…,cache:true)来缓存我想要缓存的任何特定模板或内容。无论如何,我更喜欢这个,因为它使事情变得非常明确,而且我调用的负载调用比静态数据多。我也迟到了:)谢谢你的贡献,它工作得很好这是一个错误的建议,因为GET和POST是不同的动词,应该用于不同的事情。这个
    $.ajax({url: "...", cache: false}).done(function( data ) {
        // data contains result
    }).fail(function(err){
        // error
    });