这是我目前的代码。我想要做的是更改xmlParser中的数组,并将其返回到main (就绪函数),以便将其用于所有其他函数。但是,据我所见,在返回数组之前,$("#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;
}发布于 2015-10-27 02:29:03
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”代表异步。
FYI,值得学习如何在异步操作中使用承诺。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中的,因此随着时间的推移,您将看到越来越多的代码使用它们。
发布于 2015-10-27 02:29:11
将$("#test").text(infoArray.length);放在success函数中。
https://stackoverflow.com/questions/33358966
复制相似问题