如何在jQuery.get调用中设置caching:false
jQuery.get()
是get调用jQuery.ajax()
的简写。 但是,当我在.get()
调用的数据中设置cache:false
时,发送给服务器的是一个名为cache的参数,其值为false。 虽然我的意图是发送带有数据的时间戳到服务器,以防止caching,这是如果我在jQuery.ajax数据中使用cache: false
。 我怎么做到这一点,而不重写我的jQuery.get调用jQuery.ajax调用或使用
$.ajaxSetup({ // Disable caching of AJAX responses cache: false });
更新:谢谢大家的答案。 你们都是对的 但是,我希望有一种方法让get调用知道你不想caching,或者将这个值发送到底层的.ajax(),这样就知道该怎么做。
我a。 寻find目前为止确定的三种方式以外的第四种方式:
-
通过ajaxSetup在全球范围内执行此操作
-
使用.ajax调用而不是.get调用
-
通过在您的.get调用中添加一个持有时间戳的新参数来手动执行此操作。
我只是认为这个能力应该被构build到.get调用中。
对我来说,正确的做法是列出的。 无论是ajax
或ajaxSetup
。 如果你真的想使用get
而不使用ajaxSetup
那么你可以创build自己的参数,并给它的当前date/时间的值。
然而,我会质疑你的动机,不使用其他方法之一。
自己添加参数。
$.get(url,{ "_": $.now() }, function(rdata){ console.log(rdata); });
从jQuery 3.0开始,你现在可以做到这一点:
$.get({ url: url, cache: false }).then(function(rdata){ console.log(rdata); });
我认为你必须使用AJAX方法,而不是让你closurescaching:
$.ajax({ url: "test.html", data: 'foo', success: function(){ alert('bar'); }, cache: false });
根据JQuery文档, .get()
仅将url
, data
(content), dataType
和success
callback作为其参数。 你真正想要做的是在发送之前修改jqXHR对象。 使用.ajax()
,这是通过beforeSend()
方法完成的。 但是由于.get()
是一个快捷方式,它不允许它。
尽pipe将.ajax()
调用切换到.get()
调用应该相对容易。 毕竟, .get()
只是.ajax()
一个子集,所以你可以使用.ajax()
所有默认值.ajax()
当然,除了beforeSend()
)之外。
编辑:
::看Jivings的答案::
噢,忘了cache
参数! 虽然beforeSend()
对于添加其他头文件非常有用,但内置的cache
参数在这里要简单得多。
我在比赛中很晚,但这可能会帮助其他人。 我用$ .get打了同样的问题,我不想盲目closurescaching,我不喜欢时间戳补丁。 所以经过一番研究之后,我发现你可以简单地使用$ .post来代替不使用caching的$ .get。 就那么简单。 🙂
在使用Below Method的jQuery.get调用中设置caching:false
使用新的Date().getTime(),
这将避免冲突,除非你在同一个毫秒内发生多个请求。
要么
以下内容将阻止所有未来的AJAX请求被caching,无论您使用哪种jQuery方法($ .get,$ .ajax等)
$.ajaxSetup({ cache: false });
请注意,callback语法已被弃用 :
弃用通知
jQuery 1.5中引入的jqXHR.success(),jqXHR.error()和jqXHR.complete()callback方法从jQuery 1.8开始不推荐使用。 要准备好代码以便最终删除它们,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。
这里是一个使用promise
界面的现代化解决scheme
$.ajax({url: "...", cache: false}).done(function( data ) { // data contains result }).fail(function(err){ // error });