Как управлять очередями запросов AJAX в JQUERY 1.5?
-
24-10-2019 - |
Вопрос
Я тестировал новые отложенные функции AJAX в JQUERY 1.5 и впечатлен их простотой и силой. Есть более широкий вопрос, который я связан с лучшим способом стоять в очереди этих запросов.
У меня есть два сценария: серийный и параллельный, если хотите. Я хочу избежать условий синхронизации/асинхронности, потому что я хочу, чтобы все это были асинхронными запросами, чтобы пользователь мог выполнять другие действия, ожидая обработки очереди. Затем я хочу вызвать одну функцию, когда очередь завершена обработка.
В «серийном режиме», имеющих два запроса, я хотел бы обработать их следующим образом:
Requesta -> responsea -> requestb -> responseb -> endofqueue
В «Параллельном режиме» с двумя запросами я хочу этот результат:
Requesta -> requestb (responsea, responseb обрабатывается, когда готов) -> Endofqueue
В любом случае, если какой -либо запрос не удастся, я бы хотел, чтобы очередь остановилась и передала управление функцией сбоя.
У меня есть требования, которые указывают динамическую длину очереди, поэтому я не думаю, что смогу просто натянуть кучу .Then () или .hen () отложено вместе, так как я не узнаю, один или сто элементы Анкет Я выполняю бизнес-логику на сервере через API поставщика, поэтому пакетирование на стороне сервера будет трудным, так как я не буду контролировать этот код.
Я построил тестовые случаи, которые выполняют «параллельный» корпус и вызывают функцию Whe (), в конце концов, успешно завершены, но эти тесты не динамичны по длине очереди и не портативны для последовательной модели.
Я вижу, как я мог бы создать пользовательский объект очереди, чтобы справиться с этим, но кажется, что все части уже написаны для меня в jQuery (?). Я посмотрел, но не нашел примера, который охватывает последовательные запросы таким образом.
Есть ли мысли о том, как справиться с этим с помощью очереди jQuery Queue/Offerred?
Решение
Самый простой способ достижения вашего запроса -> responsea -> requestB -> responseB Заказ будет использовать что -то вроде этого:
var queue = [];
function qNext() {
$.ajax(queue.shift()).success(qNext);
}
function qAjax(options) {
queue.push(options);
}
qAjax({
// $.ajax options
});
qAjax({
// $.ajax options
});
qNext();
Видеть Демо.
Это несколько упрощенная версия ваших требований, но было бы легко добавить обратный вызов, чтобы запустить после того, как очередь пуст.
Вы уверены, что не хотите, чтобы порядок запросов -> requestb -> responsea -> responseb?
Другие советы
Пожалуйста, обратитесь к двум вопросам, которые я задал
Надеюсь, вы сможете понять эту концепцию.
Посмотри это комментарий на.