почему это дает мне странный результат для объекта XmlHttpRequest? - PullRequest
0 голосов
/ 15 ноября 2011

Я использую следующий код для чтения XML

xmlhttp = new XMLHttpRequest();

            xmlhttp.open("GET", "/TinyEditor/XML/PreviewBody.xml", true);
            xmlhttp.send();
           alert(xmlhttp);
            var xmlDoc;
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                xmlDoc = xmlhttp.responseXML;
             alert(xmlDoc);
            }
           alert(xmlDoc);

странно, что xmlHttp читает XML, но xmlDoc не определен как ошибка. Когда я применяю отладчик и отслеживаю его, в этом случае xmlDoc не приходит неопределенным. Почему так?

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

По умолчанию запрос ajax ( Асинхронный Javascript и XML) является асинхронным.

Это означает, что вы обращаетесь к переменной xmlhttp слишком рано.Он не имеет readyState === 4 и не имеет статуса === 200 на данный момент.Вам нужно поместить это в обработчик onreadystatechange, который срабатывает каждый раз, состояние готовности меняется для текущего запроса.

xmlhttp.onreadystatechange = function() {
    var xmlDoc;
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        xmlDoc = xmlhttp.responseXML;
        alert(xmlDoc);
    }
};

Обратите внимание, что приведенный выше пример очень минималистичен.В реальном коде вам нужно сделать намного больше зависимых от браузера вещей (в основном для IE).

0 голосов
/ 15 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...