Как выполнить что-нибудь после серии ajax запросов
Извините, наверное, чайниковский вопрос...
Мне нужно сделать серию ajax запросов, а после того, как все они будут выполнены, выполнить следующий код. Что-то не соображу, как это реализовать.. Пример: let invoiceIds = []; $(".chkInvoice").each(function () { if ($(this).is(':checked')) { let route = $(this).attr("route"); let driver = $(this).attr("driver"); let deliveryDate = $(this).attr("deliveryDate"); $.getJSON(`/myApi?route=${route}&driver=${driver}&deliveryDate=${deliveryDate}`, function (data) { for (let invoice of data.Invoices) { if (invoice.Status.toLowerCase() == "completed") invoiceIds.push(invoice.Id); } }); } }); Выше выполнение серии запросов (для каждого селектора) и только после выполнения всех запросов я должен что-нибудь сделать с массивом номеров счетов (invoiceIds) Куда запрягать? :) |
А сервер не может вернуть все записи диапазона от deliveryDate1 до deliveryDate2?
|
:) Сервер многое что может.. Вопрос же не в этом. А как в принципе решаются такие задачи?
Цитата:
|
Мне в голову приходит только вариант выполнять ajax запросы синхронно
|
Цитата:
Что такое deliveryDate? Если нужно запросить сервер по ряду конкретных значений, значит нужно отправить ему массив этих значений, а если диапазон, то два значения - мин/макс. Если это параметры запроса к базе и это массив значений, то это будет один запрос к базе как WHERE field_name IN(N1, N2, N3, ..., Nn), если диапазон, то WHERE field_name BETWEEN N1 AND N2. Вот так делается - один запрос клиента, один ответ сервера и разбор данных сервера в цикле. Это рациональнее и выгоднее, чем насиловать и клиента, и сервер множественными запросами, да если еще в один момент времени это будут делать множество клиентов. |
Спасибо, что хотите мне помочь. Но ситуации бывают разные, меня сейчас интересует вопрос по java script.
Синхронный вариант работает, но блокирует основной поток, что плохо. У меня возникла идея, что можно сначала посмотреть, посмотреть, сколько элементов нужно будет обойти. Установить переменную с этим значением и в каждом вызове функции вычитать единичку. И соответственно проверять, как дошли до нуля - значит последний вызов и можно дернуть callback. Но выглядит это все как-то не надежно... Цитата:
|
|
Цитата:
$(".chkInvoice").each(function () { if ($(this).is(':checked')) { а $.map($(".chkInvoice:checked"), function ... //вернет массив значения выбранных флажков Затем передать его асинхронным запросом на сервер, а далее сделать один надлежащий запрос к базе и вернуть также только то что нужно - индексный массив значений ID, то есть и этого не потребуется на клиенте: if (invoice.Status.toLowerCase() == "completed") invoiceIds.push(invoice.Id); у вас уже будет готовый массив, используйте. Кроме этого сервер и при формировании страницы его может прописать эти данные в тело ее как js-объект и вообще запроса не потребуется. Вы что к серверу доступа не имеете или какая проблема, почему такими граблями пытаетесь решать задачу? |
Спасибо, Рони.
Похоже, это как раз то, что мне нужно Цитата:
|
Часовой пояс GMT +3, время: 16:18. |