如何在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。寻找第四种方法,而不是目前已确定的三种方法:
我只是认为这个功能应该内置到.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
});