Jquery 全局变量不保留值

Jquery 全局变量不保留值,jquery,Jquery,我有一个声明为全局(问题)的数组,问题是当我访问ajax success中的数组时,它有20个元素,但当我尝试访问时,数组长度变为0 有人能解释一下我做错了什么。$。ajax将请求排入web服务器队列,并立即返回 因此,底部警报在数据准备就绪之前运行 当数据准备就绪时,success函数将运行,并显示数据 您应该在success函数中处理数据,或者从success函数调用 有关确认和其他讨论,请参阅。$。ajax是异步的 最后一行的警报是在任何问题输入之前执行的。Ajax是异步的。这意味着您命令

我有一个声明为全局(问题)的数组,问题是当我访问ajax success中的数组时,它有20个元素,但当我尝试访问时,数组长度变为0


有人能解释一下我做错了什么。

$。ajax将请求排入web服务器队列,并立即返回

因此,底部警报在数据准备就绪之前运行

当数据准备就绪时,success函数将运行,并显示数据

您应该在success函数中处理数据,或者从success函数调用

有关确认和其他讨论,请参阅。

$。ajax是异步的


最后一行的警报是在任何问题输入之前执行的。

Ajax是异步的。这意味着您命令浏览器执行ajax请求,脚本将立即继续执行脚本的其余部分。一旦ajax请求完成,它将调用ajax调用的成功处理程序。它将首先到达

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调用中的页面最终加载时,它将执行

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

如果需要对ajax调用的结果执行操作,则需要在成功处理程序中执行所有操作。

复制Add async:false,以使其正常工作:)
alert(questions.length); // here it shows length as 20