Как сделать все вызовы AJAX последовательными? - PullRequest
23 голосов
/ 20 июля 2009

Я использую jQuery. И я не хочу параллельных вызовов AJAX для моего приложения, каждый вызов должен ждать предыдущего перед началом. Как это реализовать? Есть какой-нибудь помощник?

ОБНОВЛЕНИЕ Если есть какая-либо синхронная версия XMLHttpRequest или jQuery.post, которую я хотел бы знать. Но последовательный! = Синхронный, и я хотел бы асинхронного и последовательного решения.

Ответы [ 12 ]

0 голосов
/ 05 июля 2015

Как насчет использования событий Node.js?

var EventEmitter = require('events').EventEmitter;
var eventEmitter = new EventEmitter();
var $ = require('jquery');

var doSomething = function (responseData) {
  var nextRequestData = {};
  // do something with responseData
  return nextRequestData;
};

// ajax requests
var request1 = $.ajax;
var request2 = $.ajax;
var requests = [request1, request2];

eventEmitter.on('next', function (i, requestData) {
  requests[i](requestData).then(
    function (responseData) {
      console.log(i, 'request completed');
      if (i+1 < requests.length) {
        var nextRequestData = doSomething(responseData);
        eventEmitter.emit('next', i+1, nextRequestData);
      }
      else {
        console.log('completed all requests');
      }
    },
    function () {
      console.log(i, 'request failed');
    }
  );
});

var data = {
  //data to send with request 1
};
eventEmitter.emit('next', 0, data);
0 голосов
/ 21 июня 2010

Синхронные вызовы не обязательно медленнее, если у вас есть приложение, в котором AJAX вызывает, открывает, закрывает и закрывает сокет, несколько вызовов на сокет не имеют смысла, так как некоторые сокеты могут обрабатывать только одно соединение, в В этом случае данные в очереди, которые отправляются только после завершения предыдущего вызова AJAX, означают гораздо большую пропускную способность.

...