阻止iOS 6缓存Ajax POST请求

Prevent iOS 6 from Caching Ajax POST Requests

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Is Safari on iOS 6 caching $.ajax results?

我有一个使用PhoneGap的混合应用程序,可以在Android和iOS上正常运行。 但是当我开始在iOS 6中测试时,我注意到我没有获得大多数ajax调用的服务器数据 - 而是从先前的ajax调用中获取缓存数据。

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

  • 包含时间戳作为查询字符串参数
  • $.ajaxSetup({ cache: false });
  • 在ajax内部调用no-cache = true
  • $.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    options.data =
    jQuery.param($.extend(originalOptions.data||{}, { timeStamp: new
    Date().getTime() })); });
  • 但这些似乎都没有奏效。 我从我的ajax调用中调用Java动作类 - 它是否与上面列出的方法失败的原因有关?


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

    这就是它的完成方式。

    jQuery的:

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

    1
    $.ajaxSetup({ cache: false });

    ZeptoJS:

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

    1
    2
    3
    4
    5
    6
    7
    $.ajax({
    type: 'POST',
    headers : {"cache-control":"no-cache" },
    url : ,
    data:,
    dataType : 'json',
    success : function(responseText) {…}

    服务器端

    Java:

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

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

    。净

    1
    Response.Cache.SetNoStore();

    要么

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

    PHP

    1
    2
    header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
    header('Pragma: no-cache'); // HTTP 1.0.

    阅读这个主题

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

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