因此,经过 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
同步。
关于javascript - 从 javascript 返回一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255665/