2011-06-24 194 views
0

我有多個有點相互依賴的jQuery Ajax調用。兩者都在不同的時間在頁面加載時觸發(getDatashowData之前調用,而showData依賴於getData被首先調用)。JQuery隊列和出隊

在某些客戶端,showDatagetData之前先運行。

  1. 我該如何重新創建這個錯誤,因爲我們沒有看到發生在任何地方。看起來這取決於服務器上的負載,但我們無法確認。

  2. 要解決它,我明白我可以使用Jquery的queuedequeue。但是,在特殊情況下,我需要在排隊基礎結構之外運行。例如,我的getData看起來是這樣的:

    function getData() { 
    
        $.ajax(//options) 
    
    } 
    
    function showData() { 
    
        $.ajax(//options) 
    
    } 
    

有時候,我需要兩個人都要被執行(getData被稱爲第一),但在某些情況下,它們是相互獨立的具有getData被稱爲沒有呼籲showData

如果我排隊他們,我還可以單獨調用他們嗎?

回答

0

我認爲你應該使用jQuery中提供的Deferred object類型1.5+,而不是一個隊列:

function getData() { 
    return $.ajax(...); 
} 

function showData() { 
    return $.ajax(...); 
} 

var gd = getData(); 

if (showDataNeeded) { 
    // only call showData() when getData() has finished 
    gd.done(showData); 
} 
+0

我沒有看到你使用'$ .Defferred()'在你的代碼。我錯過了什麼嗎? – Dusty

+0

@Dusty抱歉 - 這是隱含的 - $ .ajax()調用返回一個延遲對象。我已經重述了它。 – Alnitak

+0

另外,showDataNeeded變量是什麼? – Dusty

0

爲什麼不直接附上成功回調showDatagetData的是這樣的:

function getData(){ 
$.ajax({ 
    url: "/your.url", 
    success: showData 
}); 
} 

function showData(){ 
    // foo bar here 
} 

這也與事實,你可能不希望調用showData除非getData成功交易。