jQuery.ajax,缓存和时间戳

jQuery.ajax, cache and timestamps

本文关键字:时间戳 缓存 ajax jQuery      更新时间:2023-09-26

我正在使用jquery.ajax方法向服务器发送GET请求,缓存应该被破坏,所以缓存设置为false,到目前为止一切顺利。

jQuery会自动将时间戳(我猜是纪元毫秒)添加到请求网址中,以破坏缓存。有没有办法控制jQuery使用的时间戳?(即使是几秒钟也足够了,并帮助服务器正确进行缓存,...)

无需手动更改jQuery的代码,也不干净。

深入研究jQuery代码,我们看到jQuery生成的nonce(在这种情况下只是时间戳)在那里是相当硬编码的。

https://github.com/jquery/jquery/blob/91850ecbbe04ad8f5d89dc050aa1d9002047c435/src/ajax.js(607行)

那里的nonce变量被传入,但是如果我们沿着线索返回,它会导致 jQuery.now() ,这只是 (new Date).getTime() 的别名。

因此,您的选择是:

1)手动将您自己的值附加到每个URI上,并忽略jQuery的值。

2)脏。重写 jQuery 的 now() 函数以返回您查找的值。光是想想就让我不寒而栗!因此,您可能会遇到其他意外错误,所以我不推荐它,但这是可能的。如果您仍然返回接近当前时间戳的时间戳,也许它不会太糟糕,但这可能根本不是您的情况。一个幼稚的例子:https://jsfiddle.net/pf5pskg5/

试试这个:

$.ajaxSetup({cache: false});

这样做是告诉浏览器永远不要缓存 AJAX 请求。

由于某些浏览器倾向于缓存 AJAX 请求,尤其是当它们是 HTTP GET 请求时,我遇到了奇怪的行为。

如果您不关闭 AJAX 请求缓存,IE 11 将尝试使用其缓存版本的 AJAX 请求,并对服务器返回的 HTTP 状态撒谎("304 未修改")。