JavaScript var外部函数

JavaScript var outside function

本文关键字:函数 外部 var JavaScript      更新时间:2023-09-26

如何在fn()函数之外检索returndata变量?

function fn() {
    var xmlhttp = new XMLHttpRequest();
    var vars = "request=something";
    xmlhttp.open("POST", "script.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var returndata = xmlhttp.responseText;
        }
    }
    xmlhttp.send(vars);
}

您需要在函数之前定义全局变量,然后将结果存储到该变量中。现在的方法是定义一个局部变量。

var returndata;
function fn() {
    var xmlhttp = new XMLHttpRequest();
    var vars = "request=something";
    xmlhttp.open("POST", "script.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            returndata = xmlhttp.responseText;
        }
    }
    xmlhttp.send(vars);
}

AJAX请求是异步的。你不能在披萨烤好之前吃它。在现实生活中,你给披萨公司打电话。他们烤好了,你就等着。AJAX也是如此。因此,设置returndata本身不会完成所有操作。

function fn() {
    var xmlhttp = new XMLHttpRequest();
    var vars = "request=something";
    xmlhttp.open("POST", "script.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var returndata = xmlhttp.responseText;
        }
    }
    xmlhttp.send(vars);
}       

readystate函数不是没有意义的。它一直等待,直到请求被处理完毕。从那以后你就可以继续了。依赖于返回数据的每个函数/脚本都应该从该函数调用。

你仍然可以这样做:

    var returndata; //this will now be a global variable.
function fn() {
    var xmlhttp = new XMLHttpRequest();
    var vars = "request=something";
    xmlhttp.open("POST", "script.php", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            var returndata = xmlhttp.responseText;
            doSomeThing(); //fire depended value.
        }
    }
    xmlhttp.send(vars);
}
function doSomething()
{
    if(returndata)
    {
         //do Something
    }
    else
    {
        alert("Data isn't loaded yet");
    }
}