2013-01-17 88 views
0

我希望我用正確的詞來描述這個問題....在這裏我已經定義了一個名爲TK的對象的屬性和方法。如何在回調函數之外繼續執行代碼?

var TK = { 
    List: [], 
    getSectionA: function(listName) { 
     var arrayList = []; 
     TK.returnList = $.get(
      'ajax/test.html', 
      { sendName: listName }, 
      function(data) { 
      } 
     );  
    } 
}; 

調用函數

$("#dropDownList").change(function() { 
    TK.getSectionA(fileName); 

//這裏,我試圖擺脫這種回調函數的下方,回調返回數據(resultLists)賦值給一個變量之後繼續正常執行代碼( TK.List),但是當我提醒數組變量TK.List時,不顯示任何內容。

TK.List = TK.returnList.done(function(data) { 
    var resultLists = []; 
    $.each(data, function(index, value) { 
     if (value == "false") { 
      return false; 
     } 
     else if (value == "") { 
      return false; 
     } 
     else { 
      resultLists[index] = value; 
     } 
    }); 
    return resultLists; 
}); 
alert(TK.List.join("")) // not displaying 
+5

你不能,所有需要訪問數據的代碼必須在完成的回調中。 –

+0

也許你想[jQuery延期對象](http://api.jquery.com/jQuery.Deferred/)? – apsillers

+0

我正在使用延遲... –

回答

0

只需將var resultLists = [];視爲全球。

然後在調用AJAX之後設置一個計時器。一旦定時器超時後,作

TK.List = resultsLists; 

或者做這樣的事情:

while(true){ 
    if(resultLists.length > 0) { 
     break; 
    } 
} 
TK.List = resultLists; 

但要確保存在$.each環路內使用,並分配給resultLists只在循環結束的局部變量。

+0

如果請求花費比定時器更長的時間怎麼辦? –

+0

@KevinB更新回答... – ATOzTOA

+0

如果你這樣做,你可能會反而只是'async:false'並使其同步。 –

相關問題