2013-08-17 107 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 

,你需要做的这一切都在成功处理。