使用Javascript / JQuery访问从外部XML文件构建的数组

时间:2011-08-27 23:09:03

标签: javascript jquery xml ajax arrays

我希望这不是一个新问题,但我已经把头发拉了一段时间了,所以我想在这里放弃并询问我的第一条建议。

我正在尝试使用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"

2 个答案:

答案 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 ReferenceJavaScript: 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.