2

以下是我的 JavaScript。如何使变量成为success全局变量,以便在 ajax->success 中所做的更改反映在外部?

function foo() {  
    var success = false;  
    $.ajax({

        type: "POST",
        url: "",
        dataType: "xml",
        success: function(xml) {
            var code = parseInt($(xml).find("Response").attr("code"), 10);
            switch (code) {
                case 1:
                    success = false;
                    break;
                case 0:
                    success = true;
                    break;
            }
        }
    });
    return success;
}
4

2 回答 2

4

传递一个在 中调用的回调函数success

function makeCall(callback) {
    $.ajax({
        type: "POST",
        url: "",
        dataType: "xml",
        success: function(xml) {
            var code = parseInt($(xml).find("Response").attr("code"), 10);
            callback(!code);
        }
    });
}

makeCall(function (success) {
    alert(success);
});

这就是异步编程/请求的工作方式。当然,另一种方法是使其成为同步请求,但这有点违背了目的。

我压缩了switch这些东西,因为您似乎想要0and的相反布尔值1

于 2013-05-16T04:56:36.570 回答
0

你所追求的方法是行不通的。Ajax 调用是异步的。这意味着它甚至会在实际 GET 被触发之前立即返回。因此,外部 var(可以从成功回调内部访问,这要归功于闭包)除了在 Ajax 调用之前在返回时建立的值之外,不会有任何值。相反,您可以通过设置 async:false 以及 $.ajax 中的其他值来指定 Ajax 调用同步触发,或者如果函数返回 true,则可以将代码重新构造为执行您想做的任何事情,方法是将其放入成功回调。

于 2013-05-16T04:58:23.757 回答