Использование Javascript / JQuery для доступа к массиву, созданному из внешнего файла XML - PullRequest
2 голосов
/ 28 августа 2011

Надеюсь, это не слишком новый вопрос, но я уже давно выдернул свои волосы, так что подумал, что поддамся и спрошу свой первый совет здесь.

Я пытаюсь прочитать внешний XML-файл, используя javascript / jQuery / ajax, и поместить полученные данные в массив, чтобы потом я мог ссылаться на него.

Пока что я, кажется, делаю все правильно до того момента, когда я помещаю данные в массив, но затем я пытаюсь прочитать данные где угодно, кроме как внутри функции, где я их создаю. Почему я не могу получить доступ к массиву из любой точки, кроме этой функции?

Вот мой код ... Пожалуйста, помогите !!

$.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 ]

2 голосов
/ 28 августа 2011

Вы определяете do_xmlParser как обратный вызов асинхронной функции (success вызова jquery ajax). Все, что вы хотите, чтобы происходило после успешного вызова 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: полное руководство (оба от David Flanagan).

0 голосов
/ 28 августа 2011

присмотрись, и ты увидишь.Вы фактически запускаете массив, который не существует.Вы объявили 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...