黑盒子AJAX请求返回后运行代码

时间:2011-06-24 08:28:14

标签: javascript jquery ajax asynchronous xmlhttprequest

我有一个函数向服务器发出AJAX请求,并在完成后返回相关信息。 我有另一个函数,它根据返回的信息操作其命名空间中的一些变量。

目前,我向第一个函数追加一个'callback'参数,该函数在请求完成时调用。然而,这模糊了第一个函数的目的 - 而不是'getInfo'函数,它变成了'getInfoAndDo'函数。

理想情况下,我想调用第二个函数(一个'do'函数,它调用第一个函数,一个'get'函数)并完成它的工作。

我环顾四周,发现了jQuery方法,例如.ajaxStop和.ajaxComplete,但它们似乎只在绑定到DOM元素时起作用。有没有办法在javascript中完全执行此操作?

e.g。

function _getEventAttendance(uid, callback) {
  var attendQuery = FB.Data.query('SELECT eid,rsvp_status,start_time FROM event_member WHERE uid = {0}', uid);
  FB.Data.waitOn( [attendQuery],
    function (args){
      callback(args[0]);
    }
  );
}

function logAttendance(attendance){
  console.log(attendance);
}

目前,我正在做:

_getEventAttendance(123456789, logAttendance);

这对我来说似乎很荒谬。

有没有办法编写代码,以便我可以更改_getEventAttendance中的代码片段/删除回调参数:

FB.Data.waitOn( [attendQuery],
  function (args){
    return args[0];
  }
);

然后进行等同于:

的调用
logAttendance.ajaxComplete(_getEventAttendance(123456789));

(我只是为此编写语法,我不知道它应该如何编写。)

1 个答案:

答案 0 :(得分:0)

$.when(<AJAX Request>).then(function(response){...});

可选择先使用$.pipe()过滤回复。