iPad缓存AJAX响应,尽管设置'No Store'

iPad caching AJAX responses despite setting 'No Store'

本文关键字:No Store 设置 AJAX 缓存 响应 iPad      更新时间:2023-09-26

我有一个页面,它执行一个AJAX请求来获取数据,然后由用户修改数据。在使用iPad时,如果用户进行了更改,则离开页面,然后返回—AJAX请求不会重新运行—这意味着旧数据被加载(可能来自iPad的浏览器缓存)。

我的服务器代码是ASP。. NET Forms,我已经尝试设置没有缓存与我能找到的所有设置:

Context.Response.Cache.SetNoStore()
Context.Response.Cache.SetETag(New Guid().ToString())
Context.Response.Cache.SetExpires(New DateTime())
Context.Response.Cache.SetNoServerCaching()
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Context.Response.Expires = 0

但是运气不好。什么好主意吗?

正如前面的答案所建议的,jQuery为它的$提供了一个简单的选项缓存。ajax方法:

如果设置为false,它将强制请求的页面不被缓存浏览器。将cache设置为false还会追加一个查询字符串参数,"_=[TIMESTAMP]",指向URL。

例如:

$.ajax({
  url: "test.html",
  cache: false,
  success: function () {
    $(this).addClass("done");
  }
});

如果你不使用jQuery,你可以自己实现类似的行为

我目前的修复方法是不断(稍微)修改AJAX请求的URL:

url: "/AjaxService.asmx/" + methodName + "?dt=" + new Date().getTime()

因为querystring每次传递给相同的web方法,我可以忽略它的值,但Safari 不能缓存结果,因为它总是在不同的地址。

当然这不是最好的解决方案!