【问题标题】:JQuery .load() function silently fails when offlineJQuery .load() 函数在离线时静默失败
【发布时间】:2011-02-20 10:22:58
【问题描述】:

我正在尝试使用 jqtouch/jquery 编写一个 iPhone 离线 webapp。当我禁用连接时,jquery .load() 函数似乎静默失败,甚至不调用它的回调函数。我设置了$.ajaxSetup ({cache: true});,但似乎没有任何效果。我的清单文件等也可以正常工作 - 唯一的问题是 .load() 函数。

有什么想法吗?

【问题讨论】:

标签: iphone jquery web-applications offline jqtouch


【解决方案1】:

您是否使用正确的 MIME 类型提供清单文件?来自JQTouch Offline Support

此外,清单必须与 MIME 类型的 text/cache-mainfest, 您可以在大多数情况下完成 带有 .htaccess 指令的服务器:

AddType 文本/缓存清单 .manifest

要实现缓存清单, 只需在您的 HTML 中引用它 这个:


【讨论】:

  • 是的。该应用程序的其他所有内容都可以在离线状态下完美运行。我唯一的问题是 .load() 函数静默失败并且没有调用它的回调。
【解决方案2】:

事实证明,我调用 .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);
                         }
                        );

【讨论】:

    【解决方案3】:

    本地文件返回 0 作为 HTTP 状态代码。这是因为它们不是通过 HTTP 检索的(它是本地的!)。 jQuery 将此视为错误,这不一定是坏事。

    尝试使用 onComplete 处理程序来检索两个状态代码,将其与 0 进行比较并尝试读取响应文本。

    您可能还想测试 window.navigator.online (onLine?) 以检查您是否离线(因为状态代码 0 应该只在您离线时出现)。

    【讨论】:

    • 查看我上面的答案 - 原来 jQuery 正在做一个 POST。
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多