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(),这样它就知道如何处理它。
我是。寻找除了目前已确定的三种方式之外的第四种方式:通过ajaxSetup
使用.ajax调用而不是.get调用
通过在.get调用中添加一个包含时间戳的新参数来手动执行此操作。
我只是认为这个功能应该内置到.get调用中。
答案 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)
对我而言,正确的做法是列出的方式。 ajax
或ajaxSetup
。如果您确实想使用get
而不使用ajaxSetup
,那么您可以创建自己的参数并为其指定当前日期/时间的值。
但是我会质疑你不使用其他方法的动机。
答案 3 :(得分:7)
根据JQuery文档,.get()
仅将url
,data
(内容),dataType
和success
回调作为其参数。你真正想要做的是在发送之前修改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,它不使用缓存。就那么简单。 :)