繁体   English   中英

从javascript返回一个数组

[英]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 AX 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM