Javascript 返回AJAX回调返回
例如,我有一个函数:Javascript 返回AJAX回调返回,javascript,ajax,Javascript,Ajax,例如,我有一个函数: var f1 = function(arg) { var a; $.ajax({ ... success: function(data) { a = f2(data); //return a; } }); //return a; } var f3 = function() { a = f1(arg); } AJAX在f1中获取数据后,如
var f1 = function(arg) {
var a;
$.ajax({
...
success: function(data) {
a = f2(data);
//return a;
}
});
//return a;
}
var f3 = function() {
a = f1(arg);
}
AJAX在
f1
中获取数据后,如何返回a
?由于AJAX请求是异步的(而同步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);
}
);
$.ajax({
...
async: false,
success: ...
});
return a;
var f3 = function() {
a = f1(arg);
alert(a); //i.e. "do something" with "a"
}
success: function(data) {
a = f2(data);
f3_callback(a);
}
简单明了的回答:你不能
你可以把a
变成一个全局的,但是你会受到时间问题的影响
最好是:
传入回调以在Ajax成功中运行,或者
使用jQuery,或
只需在回调中完成工作
(是的,你可以让电话同步。请不要。)
最简单的方法是使ajax调用同步。这意味着在f1函数中,使用async:false设置ajax调用,以便在调用完成并返回数据之前函数不会继续运行。您似乎需要使ajax调用同步。您可以这样做:
f1(arg, function(data) {
var a = f2(data);
alert(a);
}
);
$.ajax({
...
async: false,
success: ...
});
return a;
var f3 = function() {
a = f1(arg);
alert(a); //i.e. "do something" with "a"
}
success: function(data) {
a = f2(data);
f3_callback(a);
}
这样,JS执行将暂停,直到调用返回并且success
函数运行为止
当然还有同步调用的问题。最好重构代码,以便对success
回调中的a
变量执行所需操作
基于这个想法,假设您的f3
函数是这样的:
f1(arg, function(data) {
var a = f2(data);
alert(a);
}
);
$.ajax({
...
async: false,
success: ...
});
return a;
var f3 = function() {
a = f1(arg);
alert(a); //i.e. "do something" with "a"
}
success: function(data) {
a = f2(data);
f3_callback(a);
}
您可以这样做:
var f3 = function() {
f1(arg);
}
var f3_callback = function(a) {
alert(a); //i.e. "do something" with "a"
}
因此,您的成功函数如下所示:
f1(arg, function(data) {
var a = f2(data);
alert(a);
}
);
$.ajax({
...
async: false,
success: ...
});
return a;
var f3 = function() {
a = f1(arg);
alert(a); //i.e. "do something" with "a"
}
success: function(data) {
a = f2(data);
f3_callback(a);
}
我希望这是清楚的 你想把邮件寄到哪里。这是一个重要的问题,这是AJAX。。。您需要使用回调函数使代码正常工作。f2代表什么?也许是回调?没关系,这就解释了:我知道在c#中,任务有异步和等待命令。我不认为你能在JS中做到这一点。如果可以的话,也可以像其他人在这里说的那样进行回调。然而,如果您使用webpack或某些ES(无论现在是什么)编译器,那么您可以使用Promissions。对于ES中的许多新东西来说,这是一个很好的免费资源(6)