javascript - 从 AJAX 中的 onreadystatechange 事件返回值

标签 javascript jquery 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

最佳答案

在异步编程中,您返回数据,因为您不知道该数据何时可用 - 它是异步的。

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

例子:

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 标签时是这样的——请在问你自己的问题之前搜索类似的问题。

关于javascript - 从 AJAX 中的 onreadystatechange 事件返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298112/

相关文章:

c# - 将 Javascript 对象数组传递到 MVC3 Controller 时遇到问题,无法与 WCF 服务一起使用,有什么想法吗?

php - 将表单保存到 JSON

jquery - rails : how to update a has_many :through relation via jQuery?

javascript - 如何使用 jQuery 或 html5 显示图像深度,例如 zazzle.com

javascript - jquery 仅在搜索中没有返回结果时才显示 div

javascript - 根据另一个对象中的键和属性从数组中删除对象?

javascript - 让这个巨魔程序工作

javascript - 在多个页面上使用按键导航脚本

javascript - 如何使用 jquery/Javascript 自动点击 anchor 标签?

javascript - 如何检查javascript语法错误