返回AJAX回调返回

时间:2012-01-27 23:13:16

标签: 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在a中获得data后如何返回f1

4 个答案:

答案 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成为一个全球性的,但你会遇到时间问题。

最好:

  1. 传入回调以在Ajax成功中运行,或
  2. 使用jQuery的.when/.then construct
  3. 只需在回调中完成工作。
  4. (是的,你可以让呼叫同步。请不要。)

答案 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);
}

我希望这很清楚!