例如我有一个功能:
var f1 = function(arg) {
var a;
$.ajax({
...
success: function(data) {
a = f2(data);
//return a;
}
});
//return a;
}
var f3 = function() {
a = f1(arg);
}
如果AJAX在a
中获得data
后如何返回f1
?
答案 0 :(得分:16)
您无法返回ajax请求的结果,因为请求是异步的(并且同步ajax请求是可怕的想法)。
您最好的选择是将自己的回调传递给f1
var f1 = function(arg, callback) {
$.ajax({
success: function(data) {
callback(data);
}
});
}
然后你就像这样打电话给f1
:
f1(arg, function(data) {
var a = f2(data);
alert(a);
}
);
答案 1 :(得分:1)
简短回答:你做不到。
你可以使a
成为一个全球性的,但你会遇到时间问题。
最好:
.when
/.then
construct或答案 2 :(得分:-1)
最简单的方法是使ajax调用同步。 f1函数中的含义使用async:false设置ajax调用,以便在调用完成并返回数据之前函数不会继续运行。
答案 3 :(得分:-1)
您似乎需要使ajax调用同步。你可以这样做:
$.ajax({
...
async: false,
success: ...
});
return a;
这样,JS执行将暂停,直到调用返回并且success
函数运行。
当然存在同步调用的问题。最好是重构代码,以便在a
回调中执行success
变量所需的操作。
基于这个想法,假设您的f3
函数是这样的:
var f3 = function() {
a = f1(arg);
alert(a); //i.e. "do something" with "a"
}
你可以这样做:
var f3 = function() {
f1(arg);
}
var f3_callback = function(a) {
alert(a); //i.e. "do something" with "a"
}
因此,您的成功函数将如下所示:
success: function(data) {
a = f2(data);
f3_callback(a);
}
我希望这很清楚!