jqtouch/jquery を使用して iPhone オフライン Web アプリケーションを作成しようとしています。接続を無効にすると、jquery .load() 関数がサイレントに失敗し、そのコールバック関数を呼び出すことさえないように見えます。設定しまし$.ajaxSetup ({cache: true});
たが、効果がないようです。また、マニフェスト ファイルなども正常に動作しています。唯一の問題は .load() 関数です。
何か案は?
jqtouch/jquery を使用して iPhone オフライン Web アプリケーションを作成しようとしています。接続を無効にすると、jquery .load() 関数がサイレントに失敗し、そのコールバック関数を呼び出すことさえないように見えます。設定しまし$.ajaxSetup ({cache: true});
たが、効果がないようです。また、マニフェスト ファイルなども正常に動作しています。唯一の問題は .load() 関数です。
何か案は?
.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);
}
);
マニフェスト ファイルを正しい MIME タイプで提供していますか? JQTouch オフライン サポートから:
また、マニフェストは text/cache-mainfest の MIME タイプで提供する必要があります。これは、ほとんどのサーバーで .htaccess ディレクティブを使用して実現できます。
AddType text/cache-manifest .manifestキャッシュ マニフェストを実装するには、次のように HTML で参照するだけです。
<html manifest="sample.manifest">
ローカル ファイルは、HTTP ステータス コードとして 0 を返します。これは、それらが HTTP で取得されないためです (ローカルです!)。jQuery はこれをエラーとして扱いますが、これは必ずしも悪いことではありません。
onComplete ハンドラーを試して、両方のステータス コードを取得し、それを 0 と比較して、応答テキストの読み取りを試みます。
また、window.navigator.online (onLine?) をテストして、オフラインかどうかを確認することもできます (ステータス コード 0 は、オフラインの場合にのみ発生するため)。