我使用jQuery for AJAX。我的问题很简单 - 为什么缓存AJAX?在工作和我阅读的每个教程中,他们总是说将缓存设置为false。如果你不这样做会发生什么,服务器会“存储”这样的请求并“堵塞”吗?我在任何地方都找不到好的答案 - 只是链接告诉你如何将缓存设置为false!
答案 0 :(得分:4)
并不是服务器存储请求(尽管它们可能会进行一些缓存,尤其是更高容量的站点,如SO对匿名用户所做的那样)。
问题在于浏览器会存储指示时获得的响应(或者在IE的情况下,即使 指示<)>也是如此。基本上你设置cache: false
如果你不想用户的浏览器显示X分钟前提取的陈旧数据它。
如果有帮助,请查看cache: false
的作用,它会将_=190237921749817243
附加为查询字符串对(随机数,实际的是当前时间,因此它总是......当前) 。这个强制浏览器再次向服务器请求数据,因为它不知道查询字符串的含义,它可能是一个不同的页面......由于它无法知道或确定,已再次获取。
答案 1 :(得分:2)
服务器不会缓存请求,浏览器会。请记住,浏览器是为了快速显示页面而构建的,因此它们有一个缓存,可以将URL映射到这些URL最后返回的结果。 Ajax请求是返回结果的URL,因此它们也可以被缓存。
但通常,Ajax请求意味着做某些东西,你不想永远跳过它们,即使它们看起来像以前的请求一样的URL。
如果浏览器缓存了Ajax请求,则会有过时的响应,并且会跳过服务器操作。
答案 2 :(得分:1)
如果你没有将其关闭,你将会遇到一些问题,试图找出你的AJAX工作原理,但你的功能没有像你希望的那样响应。在标题级别强制重新验证可能是获得无缓存的AJAX数据同化的最佳方法。
答案 3 :(得分:1)
这是一个假设情景。假设您希望用户能够单击页面上的任何单词并查看包含该单词定义的工具提示。该定义不会改变,因此可以对其进行缓存。
答案 4 :(得分:0)
在任何类型的动态环境中缓存请求的主要问题是,您会在某些时候收到过时的数据。当你获得“新鲜”拉动而不是缓存拉动时,这可能是不可预测的。
如果你是通过AJAX提取静态内容,你可能会暂停缓存,但你有多确定你永远不想改变所提取的内容?
答案 5 :(得分:0)
问题是,一如既往,Internet Explorer。 IE通常会cache the whole request。因此,如果您反复触发相同的AJAX请求,那么IE将只执行一次并始终显示第一个结果(即使后续请求可能返回不同的结果)。
答案 6 :(得分:0)
浏览器缓存信息,而不是服务器。使用Ajax的关键通常是因为您将获得更改的信息。如果有一个网站的某个部分或你知道的东西不会改变,你不会多次打扰它(在这种情况下,缓存是可以的),这就是Ajax的美妙之处。由于您只应处理可能正在更改的信息,因此您希望获取新信息。因此,您不希望浏览器缓存。
例如,Gmail使用Ajax。如果只是暂停缓存,你就不会看到你的新电子邮件很长一段时间了,这很糟糕。