小编典典

从事件在AJAX中的onreadystatechange返回值

ajax

我正在尝试val在下面的代码中为变量分配一个值:

var cmdValue = "/cmd/fetch?x=";
var val;
var returned_data;

function what(){
    val = update('#TAG#');
}


function update(tag) {
    var req1 = newXMLHttpRequest();
    req1.open("GET",cmdValue + tag, true);
    req1.send("");

    return req1.onreadystatechange= function () {
        if (req1.readyState == 4 && req1.status == 200) {
            returned_data = req1.responseText;
            return returned_data;
        }else{

        }
    };
}

我在Firebug中跟踪变量,结果发现该变量val被分配了功能。有没有办法让代码运行,然后将值赋给变量val


阅读 602

收藏
2020-07-26

共1个答案

小编典典

在异步编程中,您 不需要 return数据,因为您不知道何时该数据将变得可用-它是异步的。

进行异步编程的方法是使用事件和/或回调。

例:

var cmdValue = "/cmd/fetch?x=";
var val;
var returned_data;
var performSomeAction = function(returned_data) {
    val = returned_data;
}

function what(){
    update('#TAG#',performSomeAction);
}



function update(tag,callback) {
    var req1 = newXMLHttpRequest();
    req1.open("GET",cmdValue + tag, true);
    req1.send("");

    req1.onreadystatechange= function () {
        if (req1.readyState == 4 && req1.status == 200) {
            returned_data = req1.responseText;
            //fire your callback function
            callback.apply(this,[returned_data]);
        }else{

        }
    };
}

这个问题是SO上最常见的问题之一,至少在涉及javascript标签时-请在问自己的问题之前先搜索类似的问题。

2020-07-26