Когда XmlHttpResponse.responseText будет заполнен ответом с сервера? - PullRequest
1 голос
/ 07 марта 2011

Я написал следующий простой код JavaScript

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head> <title>ajax</title> </head>
    <body>
    <script type="text/javascript">
            var xhr = new XMLHttpRequest();
            var url = "http://localhost/javascript/test.php";
            xhr.open("GET", url);
            alert(xhr);
            xhr.send(null);
            xhr.onreadystatechange = function () {alert("change");}
            alert(xhr.responseText);
    </script>
    </body>
    </html>

результат показывает, что xhr.responseText пуст.Но следующий код JavaScript работает нормально.Почему?

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head><title>ajax</title></head>
    <body>
    <script type="text/javascript">
            var xhr = new XMLHttpRequest();
            var url = "http://localhost/javascript/test.php";
            xhr.open("GET", url);
            xhr.send(null);
            xhr.onreadystatechange = 
            function () { 
                 if (xhr.readyState == 4) alert(xhr.responseText); 
            };
    </script>
    </body>

    </html>

Ниже приведен простой код PHP: test.php

    <?php
    echo date("F j, Y, H:i:s");

Ответы [ 2 ]

5 голосов
/ 07 марта 2011

Когда с сервера приходит ответ, браузер сгенерирует событие onreadystatechanged объекта, вызывая срабатывание функции, которую вы к нему подключили, и то, что вам нужно сделать в первом примере, помещается в эту строку:

alert(xhr.responseText);

внутри функции, которую вы присоединяете к событию onreadystatechanged.в противном случае браузер просто обработает строку сразу после отправки запроса.
Кроме того, вы должны проверить, что состояние готовности равно 4 (4: запрос завершен и ответ готов), и также стоит проверить, что состояние равно 200, что означает, что все в порядке.

0 голосов
/ 07 марта 2011

Подобно ответу r0nny, ваш первый пример обрабатывается до того, как ваш вызванный ajax будет возвращен.Использование onreadystatechange ожидает ответа ajax, а затем делает то, что вам нужно.

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