Выполнить код после возврата AJAX-запроса черного ящика - PullRequest
0 голосов
/ 24 июня 2011

У меня есть функция, которая делает AJAX-запрос к серверу и возвращает соответствующую информацию после его завершения.У меня есть другая функция, которая манипулирует некоторыми переменными в своем пространстве имен на основе возвращенной информации.

В настоящее время я добавляю аргумент 'callback' к первой функции, которая вызывается, когда запрос завершается.Это, однако, размывает цель первой функции - вместо того, чтобы быть функцией getInfo, она становится функцией getInfoAndDo.

В идеале, я хотел бы вызвать вторую функцию (a do'function, которая вызывает первую функцию, функцию' get ') и делает свое дело.

Я осмотрелся и нашел такие методы jQuery, как .ajaxStop и .ajaxComplete, но, похоже, они работают только тогда, когдапривязаны к элементам 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 / удалить аргумент обратного вызова:

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

, а затем совершать вызовы, которые эквивалентно просты:

logAttendance.ajaxComplete(_getEventAttendance(123456789));

(я просто составляю синтаксис для этого, я понятия не имею, как это должно быть написано.)

1 Ответ

0 голосов
/ 27 июня 2011
$.when(<AJAX Request>).then(function(response){...});

При необходимости используйте $.pipe() для фильтрации первого ответа.

...