2012-03-04 66 views
0

讓我們來看看。這是我想要做的:我有一堆從服務器獲得的userdata。我想要緩存數據,以避免每次需要時(例如電子郵件或用戶名)向服務器發出請求。從ajax調用設置變量

因此,我會構建getEmail,getUsername等函數,這些函數將Ajax調用一次並將其保存在一個對象中。如果函數被再次調用,它將返回緩存的對象。

該應用程序分爲模塊。應用程序包含數據。這裏是小提琴: http://jsfiddle.net/Osoascam/Nk6aw/

(打開控制檯查看結果)

當然,做這樣的事情:

var email = Module.Utilities.getEmail(); 

是錯誤的,因爲getEmail會調用一個Ajax功能,因此電子郵件即使在通話完成後,它仍將保持未定義狀態。 (我把它放在小提琴中以展示我想要達到的目標)。但是,我不能在getEmail()函數或調用Ajax的函數中設置變量,因爲幾個腳本必須能夠調用該函數並相應地設置它們的變量。

這樣做的最佳方法是什麼?使該檢索通過這樣的方式調用由只有一次Ajax調用返回對象的一部分功能...

由於提前,

奧斯卡

回答

1

Ajax請求是默認異步。所以,getEmail()應該接受一個回調參數...

Module.Utilities.getEmail = function(next) { 
    $.get('/api/getEmail/', function(res) { 
    next(res); 
    }); 
}; 

// when calling the function 
Module.Utilities.getEmail(function(email) { 
    console.log(email); 
}); 

這就是說,你也可以看看synchronous ajax request ...

+0

謝謝!我在最後添加了一個回調來處理它,並對getEmail和getAuthData進行了一些更改,並添加了一個新的setEmail函數。它可以在這裏看到 - > http://jsfiddle.net/Nk6aw/9/ – 2012-03-05 15:39:10