2013-07-10 92 views
0

本地存儲與服務器之間存在同步問題。本地存儲等待同步

國家,城市,用戶與服務器seperately同步。(單獨的AJAX調用)

的問題是其它的Javascript代碼(Kncokout綁定和等)必須等待同步過程。或者更好的JavaScript函數必須等待另一個。

我該如何實現它? PS:我正在使用jquery,amplifyjs(用於localstorage交互),knockoutjs庫。 PS2:我需要跨瀏覽器的解決方案:)

編輯 摘要:

我有3個JavaScript函數。所有這些都使用回調進行異步ajax調用。 這些功能可以工作並行。(不必等待對方)

但代碼有這三個函數後,開始工作。(因爲這些功能同步本地存儲和代碼使用localStorage的)

+0

請顯示您已經嘗試過的一些代碼。這是一個有點不清楚的問題,因爲現在這個職位。通常你在ajax操作完成後使用ajax回調機制繼續。你是這個意思嗎? – K3N

+0

我已添加摘要信息。 – ozz

+1

擁有一個ajaxCall MIGHT可以提高性能,具體取決於每個做什麼......如果所有3個都融合到一個,那麼之後啓動應用程序腳本也會更容易。 – Salketer

回答

3

使用延遲對象和$.when,這是它的主要用途之一。

$.when($.ajax(...),$.ajax(...),$.ajax(...)).done(function(){ 
    // all three are done 
}); 
+0

我需要用JavaScript類來實現它們(我正在使用TypeScript)您能否發送延遲對象的任何實現細節?謝謝。 – ozz

+0

http://api.jquery.com有延遲對象的部分,否則你可以去github上的src,它被整齊地組織在一個名爲deferred.js的文件中 –

1

只要您同時啓動ajax調用,以下是您可以實現的一種方法。一個簡單的計數軌道可以解決這個問題 -

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(); 
} 

這將等到持續時間最長的操作完成。如果您想將異步操作轉換爲同步操作,這是必需的。

+0

謝謝。如果在2小時內沒有更好的選擇,我會設置爲被接受的答案。最好的祝福。 – ozz