只有在缓存XML时,Ajax请求才会在Safari中失败

时间:2011-04-14 00:28:45

标签: ajax ipad caching safari manifest

我正在尝试编写一个看起来像iPad应用程序的网络应用程序,具有离线可用性。为此,我指示浏览器使用清单等缓存我的文件。当我尝试ajax xml时,它第一次工作,但后续失败。有趣的是,它“失败”,但xhr.responseXML是正确的!

这只是Safari中的一个问题,无论是在Windows上还是在iPad上。该问题仅在缓存加载时出现,一切正常。

thrownError为“”,xhr.status为0,xhr.statusText为“error”。

$.ajax({
    type: "GET",
    url: "data.xml",
    dataType: "xml",
    success: function(xml) {
        do_stuff(xml);
    },

    error: function (xhr, ajaxOptions, thrownError) {
        do_stuff(xhr.responseXML); // Why does this work?
    }
});

有什么想法吗?我最好的猜测是xml加载了错误的MIME类型?

1 个答案:

答案 0 :(得分:0)

当你的页面最初加载时,data.xml还没有在缓存中,所以ajax调用直接进入服务器。由于您已在缓存清单中列出了xhr请求的URL,因此您的浏览器将对其发出非xhr请求并将其存储在缓存中。页面的后续加载将从缓存加载并返回非xhr请求。

确保您可以作为非xhr请求访问data.xml,并且它包含您想要显示的数据。