gpt4 book ai didi

javascript - 无法使用 jQuery.ajax() 从保存到 iOS 设备主屏幕的 Web 应用程序使用 AJAX 访问 list 缓存文件

转载 作者:可可西里 更新时间:2023-11-01 02:20:05 26 4
gpt4 key购买 nike

我正在制作一个网络应用程序。它加载的一些文件包含纯静态 .JSON 数据。我将 jQuery.ajax() (jQuery 1.5.2) 与 dataType:'json' 和 cache:true 一起使用。一切正常,所有文件都已加载。我还配置了缓存 list 来缓存这些 JSON 文件(除了 css、js 和图像)。那里的一切也都运行良好——当用户访问我的站点时,我需要的所有文件都被正确缓存(我有 applicationCache 事件处理程序来确认一切正常)。我已经在 Google Chrome 中测试了所有内容,我可以看到所有文件(包括 JSON 文件)都被缓存了。当我断开网络连接时,一切正常(jQuery ajax 调用自动获取缓存的 JSON 文件)。

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

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

我不明白这个。这是 jQuery 的 .ajax() 中的限制/错误还是什么?感谢您的帮助。

最佳答案

好吧,我不想回答我自己的问题,但如果其他人遇到这个问题,我会做以下事情:

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

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

关于javascript - 无法使用 jQuery.ajax() 从保存到 iOS 设备主屏幕的 Web 应用程序使用 AJAX 访问 list 缓存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5824549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com