2011-08-31 47 views
1

我有一個問題綁定下拉列表。我認爲問題在於我的$.get()中的回調。執行獲取循環是否不安全?例如。

//on document ready 
var stateOneOrTwo = "stateOne"; 
for(var i = 0; i < 2; i++){ 
    if(i === 1) 
     stateOneOrTwo = "stateTwo"; 

    $.get(url,{},function(data) { 
    var dropdown = stateOneOrTwo; 
    $(dropdown).append(/*options*/); 
    , 'json')}; 
} 


這確實出現了不安全的。我把DRY原理扔出窗外。當我複製粘貼代碼並更改所涉及的變量名稱時,我沒有任何問題。我會留下一個具體答案的問題。

回答

1

問題在於,在XHR回來之前您正在更改stateOneOrTwo,因此兩個回調將以stateOneOrTwo運行,等於"stateTwo"。如果你只是打電話兩次,你並不需要循環。

$.get(url,{},function(data) { 
    var dropdown = "stateOne"; 
    $(dropdown).append(/*options*/); 
}, 'json'); 

$.get(url,{},function(data) { 
    var dropdown = "stateTwo"; 
    $(dropdown).append(/*options*/); 
}, 'json'); 
+0

難道這不是同一個問題嗎?如果'stateOneOrTwo'兩個get請求都改變了,爲什麼'i'保持不變? –

+0

是的,我意識到提交後。 – Dennis

+0

這就是我最終做的。正如Rikudo指出的那樣,可能有更好的方法來處理我正在做的事情。但是,現在這個工作。 –

1

我完全不確定$.get是否會在完成之前調用新的失敗,但是,更安全(更正確)的方法是使用遞歸函數確保請求在發送之前完成下一個。

+0

+1謝謝,我不熟悉遞歸函數。當我完成基本佈局時,我將不得不將這視爲重構。儘管如此,我寧願爲速度創建並行請求。 –

相關問題