我希望这不是一个新问题,但我已经把头发拉了一段时间了,所以我想在这里放弃并询问我的第一条建议。
我正在尝试使用javascript / jQuery / ajax读取外部xml文件,并将检索到的数据放入一个数组中,以便稍后再引用它。
到目前为止,我似乎正在做所有事情,直到我将数据放入数组,然后我努力在除了创建它的函数内部之外的任何地方读取数据。为什么我无法从该函数以外的任何地方访问数组?
这是我的代码...... 请帮忙!!
$.ajax({
type: "GET",
url: "data.xml",
dataType: "xml",
success: do_xmlParser
});
function do_xmlParser(xml)
{
var myArray = new Array();
$(xml).find("tag").each(function ()
{
myArray.push($(this).find("innerTag").text());
});
console.log("inside "+myArray); // This outputs the array I am expecting
return myArray; // is this right???
}
console.log("outside: "+myArray); // This does NOT output the array but instead I get "myArray is not defined"
答案 0 :(得分:2)
您将do_xmlParser
定义为异步函数(jquery ajax调用的success
)的回调。在ajax调用成功后你想要发生的任何事情都必须在该回调函数中发生,或者你必须从成功回调中链接函数。
现在的方式,代码的实际执行将是:
ajax -> file being requested -> console.log ->
file transfer done -> success handler
如果你正在做一些关键的事情而你希望这个电话是同步的,你可以提供
async : false
设置为ajax调用。然后,你应该可以做这样的事情:
var myArray = [],
do_xmlParser = function (xml)
{
$(xml).find("tag").each(function ()
{
myArray.push($(this).find("innerTag").text());
});
};
$.ajax({
type: "GET",
url: "data.xml",
dataType: "xml",
success: do_xmlParser,
async: false
});
console.log("outside: " + myArray);
async
选项不适用于跨域请求。
注
我不建议这样做。 AJAX调用应该是异步的,我总是使用success
回调来对返回的数据执行所有处理。
修改:
此外,如果您正在阅读......我建议jQuery Pocket Reference和JavaScript: The Definitive Guide(David Flanagan)。
答案 1 :(得分:0)
仔细观察,你会看到。你实际上正在发射一个不存在的数组。你已经在函数中声明了myArray。尝试做这样的事情。
console.lod("outside :"+do_xmlParser(xml)); // I think that when you merge a string and an array it will output only string, but I can be wrong.