Функция JQuery .load () молча завершается сбоем в автономном режиме - PullRequest
1 голос
/ 17 мая 2010

Я пытаюсь написать офлайн-приложение для iPhone, используя jqtouch / jquery.Когда я отключаю соединение, похоже, что функция jquery .load () молча завершается сбоем и даже не вызывает свою функцию обратного вызова.Я установил $.ajaxSetup ({cache: true});, но, похоже, ничего не изменилось.У меня также есть мой файл манифеста и т. Д., Работающий нормально - единственная проблема - это функция .load ().

Ответы [ 3 ]

0 голосов
/ 17 мая 2010

Оказывается, они так, как я вызывал .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 голосов
/ 18 мая 2010

Локальные файлы возвращают 0 в качестве кода состояния HTTP. Это потому, что они не получены с HTTP (это локально!). jQuery рассматривает это как ошибку, которая не обязательно является плохой.

Попробуйте обработчик onComplete, чтобы получить оба кода состояния, сравнить его с 0 и попытаться прочитать текст ответа.

Возможно, вы также захотите проверить window.navigator.online (onLine?), Чтобы убедиться, что вы не в сети (потому что код состояния 0 должен появляться только в автономном режиме).

0 голосов
/ 17 мая 2010

Вы обслуживаете файлы манифеста с правильным типом MIME? От Поддержка JQTouch в автономном режиме :

Кроме того, манифест должен быть подан с MIME-тип text / cache-mainfest, что вы можете сделать на большинстве серверы с директивой .htaccess:

AddType text/cache-manifest .manifest

Чтобы реализовать Cache Manifest, просто сослаться на это в вашем HTML, как это:

<html manifest="sample.manifest">
...