単一ページ アーキテクチャ (html ファイルごとに 1 ページ - 複数の HTML ファイルがあります) を使用するさまざまなページを持つ jquery モバイル Web アプリがあります。「page1」は最初にロードされたページです。ナビゲーション用に他に 4 つのタブ [page2、page3、page4、および page5] があり、これらはすべて page1 のメニューからプリフェッチされています。
ほとんどすべてのページで、AJAX post 呼び出しを使用してアプリケーションとやり取りしています。効率と使いやすさのために、コンテンツを localStorage に保存します。
page1 のコードは次のようになります。
$(document).on('pageshow','#page1', function(){
var postTo = '../api/ajaxreturn.php';
$.post(postTo, function (data){
if (localStorage.getItem('ajaxreturn') == JSON.stringify(data)) return;
else {
localStorage.setItem('ajaxreturn',JSON.stringify(data));
//alert(localStorage.getItem('ajaxreturn'))
}
}, "json");//end post
//alert('hi')
}); // end page1
他のページも同様にコーディングされています。
私が経験した問題は、元の webapp ドキュメントの読み込み時に、情報が localStorage に保存されていないことです。デバッガーをチェックインすると、プリフェッチされたページのすべての localStorage データが保存されていることがわかります。page1 の localStorage を取得するには、任意の page2/3/4/5 をクリックしてから、page1 に戻る必要があります。これにより、「pageshow」関数が再度呼び出され、機能します。
さらに奇妙なのは、アラート ('hi') のコメントを外すと、アラートを数秒間そのままにしておくと、webapp の元のロードで localStorage にデータが表示されることです。
多分それはタイミングの問題に関係していますか?レースコンディション?しかし、「alert(localStorage.getItem( 'ajaxreturn'))」のコメントを外すと、実際のコンテンツが表示されるため、ajax呼び出しが機能していることはわかっています..だから、それが何であるかわかりません。
どんな助けでも大歓迎です