使用jQuery.ajax()无法使用AJAX从iOS设备中保存到主屏幕的AJAX访问清单缓存文件

amp*_*and 11 javascript jquery caching manifest

我正在制作一个webapp.它加载的一些文件包含纯静态.JSON数据.我正在使用带有dataType的jQuery.ajax()(jQuery 1.5.2):'json'和cache:true.一切正常,所有文件都已加载.我还配置了缓存清单来缓存这些JSON文件(除了css,js和images).一切都运行良好 - 当用户访问我的网站时,我需要的所有文件都正确缓存(我有applicationCache事件处理程序,确认一切都很好).我已经测试了谷歌浏览器中的所有内容,我可以看到所有文件(包括JSON文件)都已缓存.当我断开网络连接时,一切正常(jQuery ajax调用自动获取缓存的JSON文件).

现在我试图在移动Safari上测试这个(在实际的iPad和iPhone模拟器上).在Safari中,一切都按预期工作 - 页面被缓存,并且在网络断开的后续访问中,使用缓存的文件.

但是,当我使用Safari中的"添加到主屏幕"将应用程序添加到主屏幕时,应用程序启动并且所有.js,.css和图像都正常工作,但我的Ajax调用没有!他们不访问缓存的.json文件.对于每个Ajax调用,XMLHttpRequest.statusis 0,.statusTextis error,但getAllResponseHeaders()显示与Safari中的功能应用程序相同(正确)的标头.

我不懂.这是jQuery的.ajax()中的限制/错误还是什么?任何帮助表示赞赏.

amp*_*and 17

好吧,我不想回答我自己的问题,但这是我所做的,以防其他人遇到这个问题:

显然,当尝试在脱机模式下使用$ .ajax()时,请求成功获取缓存文件,但它在XHMLHttpRequest.status上返回0.阅读完之后,我看到当用户离线时甚至在请求本地文件时,都可以返回状态码0.但是,成功的GET应该报告200到300之间的状态代码.也许$ .ajax()检查200-300状态,否则该请求被认为是失败的.

为了解决这个问题,我将代码添加到我的错误处理程序中以$.ajax()检查请求jqXHR.responseText.**length**.我知道我的JSON文件中的字符数正确,所以如果jqXHR.responseText.length与此已知值相同,我认为请求成功并继续加载文件.我唯一需要做的就是添加JSON.parse(jqXHR.responseText)错误处理程序,因为数据不会在状态码0上解析.