簡體   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