XMLHttpRequest响应'undefined'...除非警告变量1st

时间:2018-06-04 20:54:52

标签: browser xmlhttprequest alert

开溜!

我在javascript中使用xmlhttprequest,调用php页面。 php页面只回显一个字符串。

当xmlhttprequest命中4 200时,响应文本将保存为字符串。此外,xmlhttprequest位于函数中,该函数返回响应文本。

问题:函数正在返回undefined,但我通过添加alert(string)来规避错误。然后警报声明'undefined',函数在返回时传递回显值,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 :(得分:0)

XMLHttpRequest也称为AJAX,A代表异步,当你调用.send()向服务器发出请求但浏览器没有等待请​​求完成时,它会直接跳转到下一行,即alert(string)并且由于请求尚未完成,因此未定义它是很自然的。

所有AJAX请求本质上都是异步的,这意味着浏览器在.send之后跳转到下一行之前永远不会等待请求完成。

现在在你的情况下很难建立你的功能所以最好完全删除这个功能,无论你在哪里调用该函数,只需执行请求,在onreadystatechanged里面if你有你的字符串所以你要做什么(向用户显示,处理,等等)。

顺便说一下,有一个同步的XMLHttpRequest,但它已被弃用,不应该被使用,因为javascript代码自然地在一个线程甚至UI代码中执行,你不想挂起按钮等待服务器完成的某些请求。

所以它在FF和IE中工作了吗?!!它是巧合的,因为请求恰好完成,字符串恰好被填充。