8

我有一个带有回调的 ajax 调用。我想在回调结束后调用另一个方法。我使用了 jQuery 的 promise API,但正如你在下面看到的,第二个方法在第一个方法完成之前被调用。

有任何想法吗?

  my.data = function () {
     var loadFlights = function (callback) {
        //$.getJSON("/api/Acceptance/", function (data) {
        //    callback(data);
        //}); 
        $.getJSON("/api/Acceptance").success(function (data) {
           console.log("first: " + new Date().getTime());
           callback(data); 
        })
        .then(console.log("second:" + new Date().getTime()));
     };

     return { load: loadFlights }
  }();

结果控制台:

second:1357393615115 
first: 1357393615246 
4

2 回答 2

19

您没有向 提供回调函数.then(),而是传入 的输出console.log("second:" + new Date().getTime())(这就是second立即打印的原因)。

创建一个匿名函数来包装您要调用的代码(就像您在 中所做的那样.success()):

$.getJSON("/echo/json").success(function(data) {
  console.log("first: " + new Date().getTime());
}).then(function() {
  console.log("second:" + new Date().getTime())
});

演示:http: //jsfiddle.net/Blender/fJb7h/

于 2013-01-05T13:55:18.317 回答
1

试试这个:

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON( "example.json", function() {
  console.log( "success" );
})
  .done(function() {
    console.log( "second success" );
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

// Perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function() {
  console.log( "second complete" );
});

参考: https ://api.jquery.com/jquery.getjson/

于 2018-07-05T19:10:29.223 回答