2013-09-27 78 views
2

我想在JS中編寫應用程序。它將通過對其他站點的許多Ajax調用將數據存儲在一個對象中。如何組織許多自我依賴的Ajax請求

因此,我撥打電話,接收一些數據並將其放入變量。然後我使用previus數據進行其他呼叫。根據以前的數據會有很多電話。

我爲每一個電話的一些功能和tryed一個執行它們,但我看到,當執行previus下一個功能一個可能尚未完成,數據不可用。

我知道有回調函數,但我不能讓每一個功能通過回調從previus一個被調用,因爲我需要運行與否它們中的一些依賴於數據。

請幫幫我,告訴我如何安排我的應用程序或告訴我在哪裏讀到它。我甚至不知道要寫什麼給谷歌找到我需要的東西。

+0

您需要做多少個請求? –

回答

0

您正在Ajax請求,但Ajax請求不syncronous,那麼你需要使用你的回調函數中當一個功能是完成控制。

您可以使用此封裝,所以你可以作出任何努力來具有相同行爲的一些jQuery函數。

您需要創建的功能的陣列不依賴任何數據或其他功能:

var deferreds = []; 

    $.each(views, function(index, view) { 
     deferreds.push($.get('url_that_you_want_to_call', function(data) { 
       // treat your data as you wish 
     })); 
    }); 

然後你就可以通過這個陣列要執行,你可以控制,當他們完成:

$.when.apply(null, deferreds).done(callback); 

您需要,直到所有的要求都做重複此過程。

This answer was helpful

+0

是級聯異步請求。但函數不能一個接一個執行,因爲根據接收到的數據,其中一些函數可能不會執行。 – user2823754

+0

現在它看起來像這樣,但它不工作像我想 'store_data = { run:function(){ func1();如果(store_data.data.foo == bar) { func2(); } 如果(...){FUNC3()}} func1的:函數(){ do_reqwest(/ *回調FUNC * /功能(R){store_data.data = R}) } FUNC2 :函數(){ do_reqwest(/ *回調FUNC * /功能(R){store_data.data1 = R}) } FUNC3:函數(){ do_reqwest(/ *回調FUNC * /功能(R){ store_data.data2 = r}) } }' – user2823754

+0

我提高了我的回答的清晰度,以便您更好地理解我的觀點。 –