【问题标题】:Run code after black box AJAX request returns黑盒AJAX请求返回后运行代码
【发布时间】:2011-06-27 15:23:08
【问题描述】:

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

目前,我正在向第一个函数附加一个“回调”参数,该函数在请求完成时调用。然而,这模糊了第一个函数的目的 - 它不是一个“getInfo”函数,而是一个“getInfoAndDo”函数。

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

我环顾四周,发现了 .ajaxStop 和 .ajaxComplete 等 jQuery 方法,但它们似乎只在绑定到 DOM 元素时才有效。有什么方法可以完全用 javascript 做到这一点?

例如

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 中的代码 sn-p / 删除回调参数:

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

然后进行同样简单的调用:

logAttendance.ajaxComplete(_getEventAttendance(123456789));

(我只是在编这个语法,我不知道它应该怎么写。)

【问题讨论】:

  • 你为什么不给我们看一些你的代码?!
  • 您在什么环境中运行意味着您没有要绑定的 DOM 元素?您实际上不必使用 DOM 元素,只需绑定到它...
  • 我不明白为什么我需要一个 DOM 元素 - 我正在尝试做的事情与 DOM 完全无关。
  • _getEventAttendance 请不要告诉我这是一个javascript函数?如果是那么天哪,我很震惊,你怎么能这样暴露你的数据库结构?
  • $.ajax(...).queue(function(){ $.ajax(...); $(this).dequeue(); }) 这可能是你在 jQuery 中寻找的东西

标签: javascript jquery ajax asynchronous xmlhttprequest


【解决方案1】:
$.when(<AJAX Request>).then(function(response){...});

可以选择使用$.pipe() 来首先过滤响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 2013-02-28
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多