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