7

可能重复:
iOS 6 上的 Safari 是否缓存 $.ajax 结果?

PhoneGap我有一个在 Android 和 iOS 上运行良好的混合应用程序。但是当我开始在 iOS 6 中进行测试时,我注意到我没有为我的大多数 ajax 调用获取服务器数据——相反,我从以前的 ajax 调用中获取了缓存数据。

到目前为止,我已经尝试了以下选项来禁用缓存 -

  1. 包含时间戳作为查询字符串参数
  2. $.ajaxSetup({ cache: false });
  3. 在ajax调用内部no-cache = true
  4. $.ajaxPrefilter(function (options, originalOptions, jqXHR) { options.data = jQuery.param($.extend(originalOptions.data||{}, { timeStamp: new Date().getTime() })); });

但这些似乎都不起作用。我从我的 ajax 调用中调用 Java 操作类 - 这是否与上面列出的方法失败的原因有关?

4

2 回答 2

5

如何解决:有多种方法可以防止请求缓存。推荐的方法是添加一个无缓存标头。

这就是它的完成方式。

jQuery :

检查 iOS 6.0 并像这样设置 Ajax 标头。

$.ajaxSetup({ cache: false });

泽普托

检查 iOS 6.0 并像这样设置 Ajax 标头。

$.ajax({
type: 'POST',
headers : { "cache-control": "no-cache" },
url : ,
data:,
dataType : 'json',
success : function(responseText) {…}

服务器端

爪哇

httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");

确保在将任何数据发送到客户端之前将其添加到页面顶部。

。网

Response.Cache.SetNoStore();

或者

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

PHP

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
于 2012-11-14T06:14:24.940 回答
0

阅读此线程

iOS 6 上的 Safari 是否缓存 $.ajax 结果?

您可以禁用网络服务器级别的缓存并在 URL 中使用时间戳。

于 2012-10-09T09:05:36.410 回答