阻止iOS 6缓存Ajax POST请求

时间:2012-10-09 08:57:56

标签: ajax caching cordova safari ios6

  

可能重复:
  Is Safari on iOS 6 caching $.ajax results?

我有一个使用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() })); });
  5. 但这些似乎都没有奏效。我从我的ajax调用中调用Java动作类 - 它是否与上面列出的方法失败的原因有关?

2 个答案:

答案 0 :(得分:5)

来自here

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

这就是它的完成方式。

<强>的jQuery

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

$.ajaxSetup({ cache: false });

ZeptoJS

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

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

服务器端

Java

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

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

<强> .NET

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.

答案 1 :(得分:0)

阅读此主题

Is Safari on iOS 6 caching $.ajax results?

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