以下是我的JavaScript。如何将变量success
设为全局变量,以便在ajax->成功中所做的更改反映在外部?
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;
}
答案 0 :(得分: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
的内容,因为您似乎想要0
和1
的相反布尔值。
答案 1 :(得分:0)
你所采用的方法是行不通的。 Ajax调用是异步的。这意味着它甚至会在实际GET被触发之前立即返回。因此,外部var(可以从成功回调内部访问,由于闭包)除了在返回之前在Ajax调用之前建立的值之外没有任何其他值。相反,您可以通过设置async:false以及$ .ajax中的其他值来同步指定Ajax调用,或者您可以重构代码以执行任何您想要执行的操作,如果函数通过将其置于成功回调。