gpt4 book ai didi

Javascript 在嵌套 Functions() 之间传递数组

转载 作者:行者123 更新时间:2023-11-28 21:25:46 25 4
gpt4 key购买 nike

我在弹出的警报框中一直未定义...我错过了什么吗? nodeArray[0] 上有数据,因为如果我将其放入 for 循环中,它会正确发出警报。

function grabNodes(env, poolName){
var env = "dev";
var nodeArray = new Array();

var ajaxRequest; //initialize ajax object

var browser = navigator.appName; //find the browser name
if(browser == "Microsoft Internet Explorer"){
/* Create the object using MSIE's method */
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
/* Create the object using other browser's method */
ajaxRequest = new XMLHttpRequest();
}

// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
// Get the data from the server's response
//what on this page is changing
var xmlRes=ajaxRequest.responseXML.documentElement;
try {
for(var i=0; i<xmlRes.getElementsByTagName('node').length;i++){
nodeArray[i] = xmlRes.getElementsByTagName('node')[i].firstChild.nodeValue;
}//end for loop
}
catch (err){
}
alert(nodeArray[0]);
}

}

//return nodeArray;
}

函数被调用:

function other(){
oNodeArray = grabNodes(env, poolName);
}

最佳答案

Ajax 调用是异步的。 alert(nodeArray[0]); 在您分配给 ajaxRequest.onreadystatechange 的函数之前执行。

警报放入回调中,它将起作用(前提是您得到有效的响应)。 必须从回调中调用必须对结果进行操作的每个代码。

更新:您无法返回数据。您必须重构代码才能使用回调。

如果你当前的代码是这样的

oNodeArray = grabNodes(env, poolName);

// work on `oNodearray`

你必须将其更改为:

grabNodes(env, poolName, function(oNodearray) {
// work on `oNodearray`
});

并且 Ajax 回调必须调用您传递的函数并将数组传递给它:

function grabNodes(env, poolName, callback){
//....
ajaxRequest.onreadystatechange = function(){
// stuff
callback(nodeArray);
}
}

由于 Ajax 调用是异步的,因此它们不会阻止代码的执行。您需要传递一个函数,该函数将在收到数据后执行。

<小时/>

进一步评论:

  • 使用var nodeArray = [];初始化数组。
  • var env = "dev"; 将隐藏参数 env。如果您想分配默认值,请执行

    env = env || 'dev';

关于Javascript 在嵌套 Functions() 之间传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com