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 });
我有一个数组声明为全局(问题),问题是当我访问ajax内部的数组成功时它有20个元素,但是当我尝试访问时,数组长度变为0。
有人可以解释我做错了什么。
答案 0 :(得分:1)
$ .ajax是异步的。
在推送任何问题之前,您在最后一行的提醒已被执行。
答案 1 :(得分:0)
$ .ajax将请求排队到Web服务器并立即返回。
因此,底部警报会在数据准备好之前运行。
数据准备就绪后,将运行成功功能,并显示数据。
您应该在success函数中执行任何数据处理,或者通过从success函数调用。
请参阅How do I return the response from an asynchronous call?进行确认和其他讨论。
答案 2 :(得分:0)
Ajax是异步的。这意味着您命令浏览器执行ajax请求,脚本将立即继续执行脚本的其余部分。一旦ajax请求完成,它将调用你的ajax调用的成功处理程序。它将首先到达
alert(questions.length); // here it shows length as 0
当最后加载ajax调用中的页面时,它将执行
alert(questions.length); // here it shows length as 20
如果您需要对ajax调用的结果执行操作,则需要在成功处理程序中执行所有操作。