2013-03-20 28 views
0

我想通過使用localStorage來實現從服務器數據檢索「緩存」。請求參數(requestData)將成爲唯一標識符。這裏是我的代碼:保存javasctipt中的ajax調用之間的狀態

App = {}; 
App.Service = function(name) { 
    this.name = name; 
}; 
App.Service.prototype.sendRequest = function(requestData) { 
    // process request data somehow and store to local variable 
    var identifier = $.param(requestData); 

    $.ajax({ 
     url: 'web/api', 
     success: function(data) { 
      // can identifier differ from calculated before ajax call? 
      // for example if someone else start this method in the same time? 
      localStorage.setItem(identifier, data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      // handle error 
     }, 
     type: "POST", 
     data: requestData 
    }); 
}; 

這裏是我的問題:假設我已經多次啓動sendRequest方法。每個success回撥方法是否都在自己的identifier上操作,否則它們會混合(換句話說錯誤的標識符將被分配給響應數據)?

+1

你不需要擔心Ajax調用之間的數據混亂,因爲每個sendRequest()調用都會創建自己的本地'標識符'變量,這個變量綁定到成功/錯誤回調函數的閉包。 – accme 2013-03-20 20:15:22

+0

謝謝。我不知道(我甚至沒有想過),每個函數的調用創建它自己的地址空間:( – 2013-03-20 20:35:10

回答

0

您是否考慮過簡單地創建一個數組,並將其稱爲var cache = [],並在每次檢索後將響應數據添加到該數組中?只需使用一些變量來跟蹤您使用的最後一個索引,或者如果您想跟蹤請求的發生時間,則使用日期/時間,與任何響應數據分開。

+0

想法是通過請求參數(或參數組合)區分緩存中的項。 – 2013-03-20 20:05:34

+0

也許我描述的問題並不十分清楚,但我對回調函數在使用本地數據時的行爲很感興趣,他們都會在彼此之間共享一個字段還是在自己的副本上運行? – 2013-03-20 20:08:56

+1

標識符不應該更改如果你的函數被稱爲提供給'success'屬性的回調函數,如果你試圖手動調用回調函數,那麼在收到響應之前可能會遇到回調觸發問題,除此之外,發送的數據在返回時本質上是「外來的」,這意味着它與頁面上的任何內容無關,並且必須從解析後的響應中提取出來,就像任何其他數據一樣ULD。 – 2013-03-20 20:14:55

相關問題