Ответ XMLHttpRequest 'undefined' ... UNLESS, предупреждающий переменную 1st - PullRequest
0 голосов
/ 04 июня 2018

Bugger!

Я использую xmlhttprequest в javascript, вызывая страницу php.Страница php отображает только строку.

Когда xmlhttprequest достигает 4 200, текст ответа сохраняется в строку.Кроме того, xmlhttprequest находится в функции, и эта функция возвращает текст ответа.

ПРОБЛЕМА: функция возвращает undefined, но я обошел ошибку, добавив alert(string).Затем в сообщении указывается «неопределенное», и функция передает возвращаемое значение по возвращении, строку AS!

В Opera, Chrome, Firefox и Internet Explorer текст ответа заполнен только в FF и IE.Opera и Chrome вообще не работают.

Код:

    function xmlhttpr(help,type,address)
    {
        var string;
        if ( help )
        {
            string = 'The xmlhttpr function:<br>params: (help,type,address) 
   <br>as<br>false/true,<br>get/post,<br>/addr.ess?h=elp';
           return string;
       }
       if ( !address )
       {
           string = 'Parameter missing in xmlhttpr(0,type,address)';
           return string;
       }
       if ( type == 0 )
       {
           type = 'GET';
        }
       if (type == 1 )
       {
            type = 'POST';
        }
       if ( window.XMLHttpRequest )
       {
            xmlhttp = new XMLHttpRequest();
        }
       else
       {
            xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
      }
       xmlhttp.onreadystatechange = function()
       {
            //alert(this.readyState + ' ' + this.status);
            if ( this.readyState==4 && this.status==200 )
            {
                string = this.responseText;
            }
        }
        xmlhttp.open( type , address , true );
        xmlhttp.send();
        alert(string); //STINKY
        if ( string )
        {
            return string;
        }
        else
        {
            return 'Request failure';
        }
    }

1 Ответ

0 голосов
/ 05 июня 2018

XMLHttpRequest также называется AJAX, а A означает асинхронный, когда вы вызываете .send() запрос отправляется на сервер, но браузер не ожидает его завершения, он переходит прямо к следующей строке, которая alert(string) и поскольку запрос еще не завершен, естественно, что он не определен.

Все запросы AJAX по своей природе являются асинхронными, что означает, что браузер никогда не ожидает завершения запроса, прежде чем перейти к следующей строке после .send.

Теперь в вашем случае сложно построить вашу функцию, поэтому лучше удалить функцию целиком, и где бы вы ни вызывали эту функцию, просто сделайте запрос, и внутри onreadystatechanged внутри if у вас есть строкаделать с ним то, что вы хотите сделать (показывать пользователю, обрабатывать, что угодно).

Между прочим, существует синхронный запрос XMLHttpRequest, но он устарел и не должен использоваться, поскольку код javascript естественным образом выполняется в одном потоке, даже код пользовательского интерфейса, и вы не хотите вешать кнопки, ожидающие некоторого запроса к серверу.заканчивать.

Так это работало в FF и IE? !!это сработало по стечению обстоятельств, потому что запрос завершился, и строка оказалась заполненной.

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