从javascript返回一个数组

时间:2015-07-06 21:08:33

标签: javascript jquery arrays ajax

因此,经过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的观点,我回到了绘图板上,让它发挥作用。如果有人有任何建议我会非常感激!

3 个答案:

答案 0 :(得分:4)

Ajax是异步的。在ajax请求完成之前,您正在调用populateArray,然后立即diseaseNameArray记录到控制台,所以当然它将是未定义的 - 您&#39 ;不给ajax请求时间完成。您需要在success中登录到控制台。

或者使ajax调用与async: false同步。

答案 1 :(得分:2)

AJAX代表 A 同步 J avascript A nd X ml。由于它是异步的,因此您的数据不一定会达到outputHandler功能。您应该创建一个在outputHandler之后运行的函数,并在outputHandler结束时调用。您应该将console.log放在第二个函数中。这样,它可以保证获取数据。

或者,您可以将async: false传递给AJAX调用以使其同步,以便在outputHandler之后发生console.log。但是,如果AJAX调用失败,那么仍然会调用console.log,并且它将是未定义的。

答案 2 :(得分:0)

使用这个问题的answer我能够创建一个能够访问大量xml文档并利用所收集数据的游戏功能。