[英]Returning an array from a javascript
因此,经过6个多小时的搜索和尝试各种解决方案,我只能在console.log(diseaseNameArray)上记录“undefined”。 我是javascript的新手,无法弄清楚为什么这不记录一个填充的数组。 我非常感谢您提供的任何帮助/建议。 任何其他额外的代码批评也值得赞赏。
var diseaseNameArray;
var jax = $.ajax;
/*OutputHandler*/
function outputHandler(data, arrayTarget, tag, length) {
var source = $(data); /*holder of xml*/
var lengthStorage = Number(source.find(length).text()); /*length of list*/
arrayTarget = []; //array to be populated
for(i = 1; i < lengthStorage; i++)
{
arrayTarget[i] = source.find(tag + i.toString()).text();
console.log(arrayTarget[i]); //to check that elements are being entered
}
console.log(arrayTarget); //succesfully logs the full array
}
/*General function*/
function populateArray(xmlLocation, typeOfData, tag, lengthStorage, extFunction, targetArray) {
$.ajax({
type: "GET",
url: xmlLocation,
dataType: typeOfData,
success: function(xml)
{
extFunction(xml, targetArray, tag, lengthStorage);
},
error: function()
{
console.log("ugh");
}
});
}
populateArray("malePatient.xml", "xml", "sub", "length", outputHandler, diseaseNameArray);
console.log(diseaseNameArray);
更新感谢Jan的观点,我回到了绘图板上,让它发挥作用。 如果有人有建议我会非常感激!
Ajax是异步的。 您正在调用populateArray
,然后在ajax请求完成之前立即将 diseaseNameArray
记录到控制台,所以当然它将是未定义的 - 您没有给ajax请求时间完成。 您需要success
登录到控制台。
或者使ajax调用与async: false
同步。
AJAX代表A同步J avascript A和X ml。 因为它是异步的,所以您的数据不一定达到outputHandler
函数。 您应该创建一个在outputHandler
之后运行的函数,并在outputHandler
的末尾outputHandler
。 你应该把你的console.log
放在第二个函数中。 这样,它可以保证获取数据。
或者,或者您可以将async: false
传递给AJAX调用以使其同步,以便在outputHandler
之后发生console.log。 但是,如果AJAX调用失败,那么仍然会调用console.log,并且它将是未定义的。
使用这个问题的答案,我能够创建一个游戏功能,可以访问大量的xml文档并利用收集的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.