从事件返回值 onreadystatechange in AJAX 中

Returning values from the event onreadystatechange in AJAX

本文关键字:AJAX in onreadystatechange 事件 返回值      更新时间:2023-09-26

我正在尝试为下面的代码中的变量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

在异步编程中,您不会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 = new XMLHttpRequest();
    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标签方面 - 请在问自己的问题之前搜索类似的问题。

// should have a space after new or was did u notice it 
var req1 = new XMLHttpRequest();