JavaScript var外部函数

时间:2015-08-10 12:37:25

标签: javascript xmlhttprequest

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

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);
}

2 个答案:

答案 0 :(得分:2)

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

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);
}

答案 1 :(得分:1)

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");
    }
}