1

jqtouch/jquery を使用して iPhone オフライン Web アプリケーションを作成しようとしています。接続を無効にすると、jquery .load() 関数がサイレントに失敗し、そのコールバック関数を呼び出すことさえないように見えます。設定しまし$.ajaxSetup ({cache: true});たが、効果がないようです。また、マニフェスト ファイルなども正常に動作しています。唯一の問題は .load() 関数です。

何か案は?

4

3 に答える 3

0

.load()を呼び出していた方法で、GETではなくPOSTが実行されていたことが判明しました。これは、キャッシュをバイパスしたことを意味します。

私はそれを

$.('#some-element').load('path/to/data',
                         [],
                         function(responseText, status, XMLHttpRequest) {
                           alert("Load finished: " + status + ". " + responseText);
                         }
                        );

2番目の空の配列が正しい呼び出しであると想定しましたが、これによりJQueryはおそらく引数なしでPOSTを実行しました。GETの正しい呼び出しは次のとおりです。

$.('#some-element').load('path/to/data',
                         function(responseText, status, XMLHttpRequest) {
                           alert("Load finished: " + status + ". " + responseText);
                         }
                        );
于 2010-05-17T19:57:39.220 に答える
0

マニフェスト ファイルを正しい MIME タイプで提供していますか? JQTouch オフライン サポートから:

また、マニフェストは text/cache-mainfest の MIME タイプで提供する必要があります。これは、ほとんどのサーバーで .htaccess ディレクティブを使用して実現できます。

AddType text/cache-manifest .manifest

キャッシュ マニフェストを実装するには、次のように HTML で参照するだけです。

<html manifest="sample.manifest">
于 2010-05-17T14:04:41.107 に答える
0

ローカル ファイルは、HTTP ステータス コードとして 0 を返します。これは、それらが HTTP で取得されないためです (ローカルです!)。jQuery はこれをエラーとして扱いますが、これは必ずしも悪いことではありません。

onComplete ハンドラーを試して、両方のステータス コードを取得し、それを 0 と比較して、応答テキストの読み取りを試みます。

また、window.navigator.online (onLine?) をテストして、オフラインかどうかを確認することもできます (ステータス コード 0 は、オフラインの場合にのみ発生するため)。

于 2010-05-17T20:17:07.200 に答える