Javascript Ajax请求缓存:“奇怪”的行为

Javascript Ajax请求缓存:“奇怪”的行为,javascript,jquery,ajax,caching,xmlhttprequest,Javascript,Jquery,Ajax,Caching,Xmlhttprequest,我有一个javascript应用程序,它通过RESTful API请求对象。在许多情况下,我需要在应用程序的不同部分获得相同的对象;例如,我希望利用浏览器缓存,而不是在对象中手动缓存它们 所以,我让服务器设置了一个缓存控件:public,max age=30头,但显然响应并不总是从缓存中获取 奇怪的是,通过jQuery发出的请求似乎只有在两个条件都适用时才会被缓存: 在窗口加载事件处理程序中运行 已包装在setTimeout中…,0 当使用普通XMLHttpRequest时,显然至少满足上述条件

我有一个javascript应用程序,它通过RESTful API请求对象。在许多情况下,我需要在应用程序的不同部分获得相同的对象;例如,我希望利用浏览器缓存,而不是在对象中手动缓存它们

所以,我让服务器设置了一个缓存控件:public,max age=30头,但显然响应并不总是从缓存中获取

奇怪的是,通过jQuery发出的请求似乎只有在两个条件都适用时才会被缓存:

在窗口加载事件处理程序中运行 已包装在setTimeout中…,0 当使用普通XMLHttpRequest时,显然至少满足上述条件中的一个就足够使用缓存版本了

以下是完整的示例代码,以及HTTP响应等:

有人对此有解释吗


我完全可以在窗口加载处理程序中包装代码执行,事实上已经这样了,但是必须在setTimeout中包装请求…,0是非常奇怪的…

听起来像是一个封装范围问题。你能给我们一些示例代码吗?@Archer所有的代码都在这里:但我不知道哪里可能存在范围问题。我承认这听起来很奇怪,但将它放在一个封闭函数中解决了这个问题的事实确实表明了这一点。您是否尝试过函数{//您的代码}?是的,我试过了,与未包装的代码没有区别,显然不是封闭的函数,而是异步运行的。。这是使用普通XHR时的一部分,虽然请求仍然执行了两次,但其工作方式几乎符合预期