2014-03-28 78 views
1

我想從localStorage獲取我的數據,因爲它離線更快,可用,然後從網絡獲取數據,讓我們說ajax調用。臨時返回函數

function getdata(){ 
    function loadViaAjax(){ 
     localStorage.data=newerData; 
     return newerData; 
    } 
    if(localStorage.data){ 
     return localStorage.data; 
    } 
} 
toBeInseretIntoDOM=getData(); //AngularJS will do this part 

我們的目標是讓localStorage.data第一,因爲用戶可以連接速度慢,老的信息仍然比沒有好,同時做ajax request得到那麼最新的數據。
邏輯上,localStorage的數據將會更快,因此應該返回並插入到DOM中,但是一旦ajax趕上,數據應該更新。

+0

什麼用的情況下,此?我的意思是,如果您需要從服務器獲取數據,那麼您從localStorage顯示的信息不完整或不準確。如果它不完整,那麼只有在用戶請求時才能獲取它。如果它不準確,那麼從localStorage獲取它是沒有意義的。在任何情況下,如果你想延遲服務器請求,你總是可以使用javascript的'setTimeout' – lascort

+0

想象一下,它是在你的手機和手機上的互聯網連接,我想獲得至少最後一個會話數據,如果用戶得到他的互聯網連接,他應該得到最新的信息。 – Akxe

+0

那麼,在你的帖子中提到的幾秒之後,它就會從服務器獲得它,這是一個很大的區別。如果是這種情況,那麼你應該問如何檢查移動設備上的互聯網連接,如果有的話。其實我不認爲我甚至知道這個問題是誠實的。 – lascort

回答

1

如果有,有時異步行爲,有時一個功能不(或,你的情況,始終都) ,那麼我發現最好的辦法就是把它看成是異步的。換句話說,它傳遞一個回調,始終採取行動的結果從那裏:

function getdata(callback) { 
    $.get(data_url, function(response) { 
     callback(response); 
    }); 
    callback(localStorage.data); 
} 

使用方法如下:

getdata(function(data) { 
    // do something 
}); 

注意回調不必關心數據是否同步或不同步檢索。它可以只處理收到的數據。

類似的模式是,如果你有它返回的數據,並去得到它,如果你不這樣做:

function getdata(callback) { 
    if (localStorage.data) { 
     callback(localStorage.data); 
    } else { 
     $.get(data_url, function(response) { 
      callback(response); 
     }); 
    } 
} 
+0

方式更好。非常感謝 – Akxe

+0

如果localStorage.data沒有設置,那麼這隻會從服務器獲取數據,這不是您要求的。 P.S有點意味着改變接受的答案:( –

+0

@Mike - 這只是我的第二個例子,我只是爲了比較而包括 –

2
function setdata(data){ 
//do whatever you need to with your data here 
} 

function getdata(){ 
    $.get(data_url,function(response){ 
     setdata(response); 
    }); 

    if(localStorage.data){ 
     setdata(localStorage.data); 
    } 

} 

getdata被調用時,ajax請求將被立即發送出去。無需等待回覆,數據將從本地存儲(如果存在)設置爲setdata。當ajax請求收到響應時,setdata被再次調用,但這次是與服務器數據。

+0

我想這是做到這一點的正確方法。謝謝 – Akxe

0

我聽起來像你說...

我想保持在localStorage的可用數據的最後一個副本,但一旦在一段時間,我想看看我是否可以通過Ajax清新數據。

如果是這樣的話,那麼你會這麼像..

// This is not complete code ... 
function loadData(callback) { 
    getFromCache() { 
    var data = window.localStorage.getItem("mystuff"); 
    if (data) { 
     callback(JSON.parse(data)); 
    } 
    } 


    handleSuccess(data) { 
    window.localStorage.setItem("mystuff", JSON.stringify(data)); 
    callback(data); 
    } 

    var ajaxConfig = { 
    url: "http://example.com", 
    error: getFromCache, 
    success: handleSuccess 
    } 
    // Trigger ajax call here... 
    // You can even use a window.setTimeout() here 
    // to see if the ajax event takes too long -- if so 
    // cancel it and call getFromCache 
}