Вы определяете 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).