[英]global variable won't update from function within AJAX success
好的,所以我似乎无法在通过ajax后更改systemPath的全局变量,它可以在ajax内部运行,但是我需要在ajax外部进行更新的变量。 基本上,我正在尝试从xml创建路径数组,并使用它们查找其他可以生成表的xml文件。
有人知道这是怎么回事吗? ajax是否在变量设置之前运行,这就是为什么ajax之后的数组长度为0的原因?
var systemPath = new Array();
var techDigestArr = new Array();
var addToArray = function(thisarray, toPush){
thisarray.push(toPush);
}
$.ajax({
url: fullPath+"technical/systems/systems.xml",
dataType: ($.browser.msie) ? "text" : "xml",
success: function(data){
var xml;
if (typeof data == "string") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
$(xml).find("system").each(function(){
var urlString = fullPath + "technical/system_" + $(this).attr("id") + "/" + $(this).attr("id") + "tech-digest.xml <br />";
//alert(urlString);
$("#td-articles").append(systemPath.length + urlString);
addToArray(systemPath,urlString);
//systemPath.push(urlString);
});
$("#msg-output").append("total - " +systemPath.length);//Returns 48
},//END SUCCSESS
error: function(){
alert("Sorry - ");
history.go(-1);
}
});//END AJAX CALL
$(document).ready(function(){
//$("#msg-output").append("total - " + systemPath.length); Returns 0
});
Ajax是异步运行的。 事情在您的代码中按此顺序执行。
$.ajax()
之前的内容 $.ajax()
启动一个ajax调用(在等待响应的同时,它继续运行其余代码) $.ajax()
success
回调 请注意,取决于通话速度有多快,通话3和4的顺序可能相反(此处不是这种情况)
因此,当执行$(document).ready()
,ajax调用可能尚未返回,因此成功回调中的代码没有机会执行。 如果您很幸运并且连接速度很快,那么响应可能会在文档准备好之前出现,但这不太可能。
就像这样,您可以看到全局变量被更新了,您可以设置一个超时:
$(document).ready(function(){
setTimeout(function(){
$("#msg-output").append("total - " + systemPath.length);
//if the delay set below is more than the time between the ajax request and the server response than this will print the correct value
},2000);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.