2013-08-17 162 views
2
var questions = []; 
$(document).ready(function() { 

$.ajax({ 
    type:"GET", 
    url:"question.xml", 
    dataType: "xml", 
    success: function(data) { 

     $(data).find('item').each(function() { 

      var question = $(this).find('question').text(); 
      var answer = $(this).find('qid').text(); 
      var opt1 = $(this).find('ans1').text(); 
      var opt2 = $(this).find('ans2').text(); 
      var opt3 = $(this).find('ans3').text(); 
      var opt4 = $(this).find('ans4').text(); 

      questions.push({'question':question, 'answer':answer, 'opt1':opt1, 'opt2':opt2, 'opt3':opt3, 'opt4':opt4}); 
     }); 
     alert(questions.length); // here it shows length as 20 
    } 
}); 
alert(questions.length); // here it shows length as 0 }); 

我有一個數組聲明爲全局(問題),問題是當我訪問數組裏面有20個元素,但是當我嘗試訪問數組的長度變成0.全局變量不保留價值

有人可以解釋我做錯了什麼。

+1

duplicate of http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call – Paul

+0

添加異步:false爲此工作:) – AdityaSaxena

回答

0

$ .ajax將請求排隊到Web服務器並立即返回。

因此,底層警報在數據準備就緒之前運行。

數據準備就緒後,運行成功功能,數據出現。

您應該對成功函數中的數據進行任何處理,或者通過從成功函數中調用。

請參閱How do I return the response from an asynchronous call?以進行確認和其他討論。

1

$ .ajax是異步的。

在推送任何問題之前,您的最後一行的警報已執行。

0

Ajax是異步的。這意味着您可以命令瀏覽器執行ajax請求,腳本將立即繼續執行腳本的其餘部分。一旦ajax請求完成,它會調用你的ajax調用的成功處理程序。它首先會達到

alert(questions.length); // here it shows length as 0 

而當在你的Ajax調用的頁面是最後加載如果你需要從Ajax調用的結果執行操作將執行

alert(questions.length); // here it shows length as 20 

,你需要做的這一切都在成功處理。