尽管设置了“No Store”,但iPad缓存了AJAX响应

时间:2011-07-14 10:47:15

标签: javascript asp.net ajax ipad safari

我有一个页面,它执行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

但没有运气。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

正如上一个答案中所提出的,jQuery为$.ajax method提供了一个简单的选项 cache

  

如果设置为false,则会强制请求的页面不被缓存   浏览器。将cache设置为false也会附加查询字符串参数,   “_ = [TIMESTAMP]”,到URL。

例如:

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

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

答案 1 :(得分:0)

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

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

因为每次都将查询字符串传递给同一个Web方法,所以我可以忽略它的值,但Safari 不能缓存结果,因为它始终位于不同的地址。

当然,这不是最佳解决方案!