从Javascript函数返回值

Sum*_*pta 1 javascript php xmlhttprequest

我使用以下代码来显示函数的返回值test2.

输出显示为:x的值为:undefined

任何人都可以帮我解释如何从函数返回值test2?请注意,功能test2XMLHTTPRequest

<script language="javascript">

    function test1()
    {
        var x = test2();
        alert('Value of x is: '+x);
    }

    function test2()
    {
        if(window.XMLHttpRequest)
        {
            abcd= new XMLHttpRequest();
        }
        else
        {
            abcd=new ActiveXObject("Microsoft.XMLHTTP");
        }

        abcd.onreadystatechange=function()
        {
            if (abcd.readyState==4 && abcd.status==200)
            {
                    return abcd.responseText; // it is getting value 2 here
            }
            else if(abcd.readyState < 4)
            {
                return -1;
            }
        }
        abcd.open("GET",sam.php,true);
        abcd.send();
    }

</script>
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 8

听起来您希望XML HTTP请求中的值是返回值test2.这是不可能的,因为此XML HTTP请求异步test2执行并同步执行.

处理此问题的正确方法是将回调传递test2给在请求完成时执行.向回调提供从XML HTTP请求返回的值.例如

function test1() {
  test2(function (x) {
    alert('The value of x is ' + x);
  });
}

function test2(callback) {
  ...
  abcd.onreadystatechange=function() {
    if (abcd.readyState==4 && abcd.status==200) {
      callback(abcd.responseText);
    } else {
      callback(-1);
    }
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)