Как использовать XML-ответ как XMLObject вне функции обратного вызова ajax - PullRequest
0 голосов
/ 01 мая 2010

Надеюсь, я только что сделал глупый недосмотр, но не могу понять, почему не работает следующее:

$(function() {
var xml;
    $.get(
        "somexml.xml",
        function(data){
            xml = data;
        },
        "xml");
    alert(xml);
});

Если я помещаю предупреждение в функцию обратного вызова, я получаю обратно object XMLdocument, но если я помещаю его вне вызова ajax, я получаю undefined.

Поскольку моя цель - проанализировать новый DOM, я не хочу, чтобы вся обработка XML-документа была в функции обратного вызова.

Я попытался определить переменную вне всей функции onready, внутри вверху (как выше) и внутри функции обратного вызова, но все безуспешно.

Согласно Указание типа данных для запросов Ajax в документации jquery, это должно быть возможно.

Ответы [ 2 ]

2 голосов
/ 01 мая 2010

AJAX определяется как Асинхронный JavaScript и XML - хотя люди также используют этот термин для синхронных и не XML-запросов. Тем не менее, асинхронный означает, что запрос будет выполняться в отдельном потоке. xml не определено, потому что происходит следующее:

Запрос отправлен -> xml доступ к var -> ответ получен -> data назначен xml переменная

Как видите, полученные данные не присваиваются переменной xml, пока вы не попытаетесь получить к ней доступ. Если вам просто нужен отдельный блок для обработки данных XML, почему бы не создать отдельную функцию и передать ее в качестве параметра?

$(function() {
    $.get(
        "ews_cal_finditem.xml",
        parseXML,
        "xml");
});
function parseXML(data) {
    // This is the callback function
    alert(data);
}

Или даже

$(function() {
    $.get(
        "ews_cal_finditem.xml",
        function(data){
            parseXML(data);
        },
        "xml");
});
function parseXML(xml) {
    alert(xml);
}
0 голосов
/ 01 мая 2010

Вы также можете запустить вызов ajax как async = false, но это следует делать осторожно, так как это заблокирует дальнейшее выполнение до его завершения. Вы должны быть осторожны, когда вы берете A из AJAX.

...