jQuery未按顺序运行

jQuery未按顺序运行,jquery,xml,Jquery,Xml,这是我目前拥有的代码。我要做的是在xmlParser中更改数组,并将其返回到main(ready函数),以便将其用于所有其他函数。但是,据我所知,在返回数组之前,将运行$(“#text”)。还有什么可以推迟的吗 $(document).ready(function() { var infoArray = [] $.ajax({ type: "GET", url: "works.xml", dataType: "xml",

这是我目前拥有的代码。我要做的是在xmlParser中更改数组,并将其返回到main(ready函数),以便将其用于所有其他函数。但是,据我所知,在返回数组之前,将运行$(“#text”)。还有什么可以推迟的吗

$(document).ready(function() {
    var infoArray = []
    $.ajax({
        type: "GET",
        url: "works.xml",
        dataType: "xml",
        success: function(xml) { infoArray = xmlParser(xml)}
    });
    $("#test").text(infoArray.length);
});

function xmlParser (xml) {
    //do some push
    //I have a test here to make sure that the length of the array is what I want
    return Array;
}

您的Ajax调用是异步的。这意味着当你在这里执行它时,它就开始了,稍后它就会结束。您必须将任何使用ajax调用结果的代码放入
success
处理程序中,或者放入从成功处理程序调用并将数据传递给的函数中

Javascript中的异步操作在将来某个不确定的时间完成。同时,以下代码行将继续执行(在Ajax代码完成之前)。然后,在当前执行线程完成之后,当结果从发送Ajax调用的服务器返回时,调用Ajax调用的成功处理程序并执行代码

下面是如何在
success
处理程序中使用ajax调用的结果:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "works.xml",
        dataType: "xml",
        success: function(xml) { 
            var infoArray = xmlParser(xml)
            $("#test").text(infoArray.length);
        }
    });
});

function xmlParser (xml) {
    //do some push
    //I have a test here to make sure that the length of the array is what I want
    return Array;
}
如果您不知道,“Ajax”中的第一个“A”代表异步


仅供参考,值得学习如何为异步操作使用承诺。jQuery自动为其ajax操作构建承诺,因此您可以使用如下承诺执行上述代码:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "works.xml",
        dataType: "xml"
        }
    }).then(function(xml) {
        var infoArray = xmlParser(xml)
        $("#test").text(infoArray.length);
    }, function(err) {
        // handle errors here
    });
});
这里看起来并没有好多少,但是如果您开始对多个异步操作进行排序,或者有嵌套的异步操作,或者希望等待多个异步操作完成,承诺可以使所有这些都变得简单很多


而且,承诺内置于ES6中,因此随着时间的推移,您将看到越来越多的代码使用它们;在success函数中。

ajax是异步的。将$(“#test”).text(infoArray.length)移动到函数体(xml)中将其移动到success函数中,这样它只在ajax返回后运行。感谢您解释什么是异步的,这可能是重复的。我正在为它会做什么而挣扎@TreeNguyen-如果您要从浏览器进行Ajax调用,您需要非常熟悉如何在Javascript中使用异步结果,因为这是Javascript和Ajax的方式。一旦有人向您解释了这个概念,它实际上并没有那么复杂,但它确实意味着您必须以不同的方式编写操作序列。不能像常规同步操作那样对它们进行线性编码。相反,您必须在成功处理程序中“继续”下一步。承诺提供了一种更简化的异步操作管理方式,但它们是需要学习的另一件事。@jfriend00可以询问ajax,因为这是一个与ajax相关的问题。我总是在处理数据库的每个事务时使用ajax。我这样做是为了创建、检索、更新和删除数据。在网页中使用这么多ajax有什么缺点吗?@Pekka-使用这么多ajax没有缺点。如果你不想发布表单并加载新页面,这是网页中Javascript与服务器通信的主要方式。当我发布评论时,更新不可用,所以我想问一下承诺,因为我还没有使用过它,我有点不理解解释。承诺与ajax的成功部分不同吗?在没有成功的部分。只有分手。如果失败会发生什么?我总是使用这种格式
$.ajax({},成功:函数(数据){},错误:函数(数据){})@jfriend00