0

localstorage とサーバーの間に同期の問題があります。

国、都市、ユーザーは個別にサーバーと同期されます。 (個別の ajax 呼び出し)

問題は、他の Javascript コード (Kncokout バインディングなど) が同期プロセスを待たなければならないことです。または、JavaScript 関数が別の関数を待機する必要があります。

どうすれば実装できますか?

PS: jquery,amplifyjs (localstorage の操作用),knockoutjs ライブラリを使用しています。PS2: クロスブラウザ ソリューションが必要です :)

編集の 要約:

私は3つのJavascript関数を持っています。それらはすべて、コールバックを使用して非同期 ajax 呼び出しを行います。これらの機能は並行して動作する可能性があります.(互いに待つ必要はありません)

ただし、コードはこれら 3 つの関数の後で動作する必要があります (これらの関数はローカル ストレージを同期しており、コードは localstorage を使用しているため)。

4

2 に答える 2

3

遅延オブジェクトと を$.when使用します。これが主な用途の 1 つです。

$.when($.ajax(...),$.ajax(...),$.ajax(...)).done(function(){
    // all three are done
});
于 2013-07-10T14:52:36.843 に答える
1

同時に ajax 呼び出しを開始する場合に、これを実装する方法の 1 つを次に示します。シンプルなカウントトラックで解決できます-

var countCalls;

次に、ajax 関連のコードで:

function initAjaxCalls() {

    countCalls = 0; //(re)set counter

    startAjax1(commonCallback); //pseudo call, use commomCallback as callback
    startAjax2(commonCallback);
    startAjax3(commonCallback);

}

コールバックでは、呼び出しの数を追跡します。

function commonCallback(e) {

    countCalls++;

    /// when we have reached the max count, perform the sync. step
    if (countCalls === 3) performSyncStorage();
}

これは、最も長く続く操作が完了するまで待機します。これは、非同期操作を同期操作に変換したい場合に必要です。

于 2013-07-10T14:35:00.357 に答える