我正在尝试使用 jqtouch/jquery 编写一个 iPhone 离线 webapp。当我禁用连接时,jquery .load() 函数似乎静默失败,甚至不调用它的回调函数。我已经设置$.ajaxSetup ({cache: true});
了,但似乎没有效果。我的清单文件等也可以正常工作-唯一的问题是 .load() 函数。
有任何想法吗?
我正在尝试使用 jqtouch/jquery 编写一个 iPhone 离线 webapp。当我禁用连接时,jquery .load() 函数似乎静默失败,甚至不调用它的回调函数。我已经设置$.ajaxSetup ({cache: true});
了,但似乎没有效果。我的清单文件等也可以正常工作-唯一的问题是 .load() 函数。
有任何想法吗?
您是否使用正确的 MIME 类型提供清单文件?来自JQTouch 离线支持:
此外,必须使用 MIME 类型的 text/cache-mainfest 提供清单,您可以在大多数服务器上使用 .htaccess 指令来完成:
AddType 文本/缓存清单 .manifest要实现缓存清单,只需在 HTML 中引用它,如下所示:
<html manifest="sample.manifest">
结果是我调用 .load() 的方式导致它执行 POST 而不是 GET,这意味着它绕过了缓存。
我称之为
$.('#some-element').load('path/to/data',
[],
function(responseText, status, XMLHttpRequest) {
alert("Load finished: " + status + ". " + responseText);
}
);
我假设第二个空数组是正确的调用,但这使 JQuery 执行 POST,可能参数为零。GET 的正确调用是:
$.('#some-element').load('path/to/data',
function(responseText, status, XMLHttpRequest) {
alert("Load finished: " + status + ". " + responseText);
}
);
本地文件返回 0 作为 HTTP 状态代码。这是因为它们不是通过 HTTP 检索的(它是本地的!)。jQuery 将此视为错误,这不一定是坏事。
尝试使用 onComplete 处理程序来检索两个状态代码,将其与 0 进行比较并尝试读取响应文本。
您可能还想测试 window.navigator.online (onLine?) 以检查您是否离线(因为状态代码 0 应该只在您离线时出现)。