2013-10-31 56 views
0

我有兩個例子。請告訴我爲什麼我的變量help在這個例子中沒有按照預期工作。我檢查它正在進入循環。

結果:undefined

function autopop(){ 
    var help; 
    $.ajax({ 
     type : "POST", 
     url : "/cgi-bin/my.pl", 
     data : "action=autopop", 
     dataType : "json", 
     success : function(data) { 
      for (var i = 0; i < data.length; i++) { 
       help = "test"; 
      } 
     } 
    ); 

    $("#id").append(help); 
} 

結果:test

function autopop() { 
    var help = "test"; 
    $.ajax({ 
     type : "POST", 
     url : "/cgi-bin/my.pl", 
     data : "action=autopop", 
     dataType : "json", 
     success : function(data) { 
      for (var i = 0; i < data.length; i++) { 
       help = "blub"; 
      } 
     } 
    ); 

    $("#id").append(help); 
} 

請告訴我爲什麼我不能從這個AJAX /循環組合中,以及如何我可以改變這個事實訪問我的變種。

+2

這是由於AJAX請求的異步性質,與其他1,092,938,932,893次相同。 –

+0

@tymeJV是對的。關鍵是要記住它是異步的。如果你不知道這意味着什麼,請快速閱讀。 – j0hnstew

+1

我不認爲有必要降低這一點。至少他已經把他嘗試過的並且正在尋求幫助。這比其他數以百萬計的「給我答案」的帖子要好得多。 –

回答

1

我猜測,根據您的意見,你想達到什麼是這個...

success : function(data) { 
    $("#id").append(data); 
} 

success : function(data) { 
    help = data; 
    doCallback(); 
} 

隨着doCallback方法。

function doCallback() { 
    alert(help); 
} 
+0

不,但謝謝你的猜測 - 請閱讀下面的評論。追加只是測試是否寫入var的最簡單方法。我需要在ajax成功塊中設置一個變量。 – eye

+0

查看更新的答案 –

3

AJAX是異步 - 正因爲如此,設置help之前你.append語句被擊中。包括你的append成功的方法中:

success : function(data) { 
    for(var i = 0; i < data.length; i++){ 
     help="test"; 
    } 
    $("#id").append(help); 
} 
+0

感謝您的解釋 - 追加只是一個可能性測試結果的變種在這個例子中,與問題無關......問題是在ajax成功塊中填充一個var。你知道有什麼方法可以等待塊完成嗎?或者任何其他方式來使這個工作? – eye

+0

將回調函數傳遞給調用ajax的函數,並將任何想要的內容傳遞給成功塊中的內容。至於在成功塊中填寫一個變量,你已經這麼做了。 – tymeJV

0

你沒有得到預期的結果,因爲你的Ajax調用火災,會繼續執行,你的代碼$("#id").append(help); 寫在成功的代碼,設置輔助變量之前執行。

+0

非常感謝您的解釋。現在我知道它爲什麼不起作用 - 但我怎樣才能在ajax成功塊中設置一個var以備後用? – eye

+0

添加你需要在成功回調調用之後執行的代碼,它將在成功時執行。通常,您將使用由呼叫返回的結果而不是您設置的值。 – Surender

相關問題