首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Javascript函数返回值

从Javascript函数返回值
EN

Stack Overflow用户
提问于 2011-08-10 22:04:23
回答 5查看 2.1K关注 0票数 1

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

显示的输出是:x的值是:未定义的

有人能帮助我解释如何从函数test2返回一个值吗?请注意,函数test2XMLHTTPRequest

代码语言:javascript
运行
复制
<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>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-10 22:10:08

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

处理此问题的正确方法是向test2传递一个回调,以便在请求完成时执行。回调提供了从XML请求返回的值。例如

代码语言:javascript
运行
复制
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);
    }
  }
  ...
}
票数 8
EN

Stack Overflow用户

发布于 2011-08-10 22:08:07

函数test2立即返回(值undefined)。在尝试从AJAX调用获取任何数据之前,您需要等待AJAX调用的返回。这是AJAX的(A)同步部分。

代码语言:javascript
运行
复制
abcd.onreadystatechange=function()
{
    if (abcd.readyState==4 && abcd.status==200)
    {
        // Put the code that deals with the returned value here...
    }
    else if(abcd.readyState < 4)
    {
        return -1;
    }
}
票数 3
EN

Stack Overflow用户

发布于 2011-08-10 22:11:38

正如预期的那样,函数test1调用test2,该函数生成XMLHttpRequest。但问题是你的时间问题。只有在状态发生变化时才调用onreadystatechange。当状态改变时,函数test2已经退出而没有返回值。

相反,您的警报应该发生在您目前有return abcd.responseText的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7018451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档