Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2020, 15:00
Новичок на форуме
Отправить личное сообщение для AxMuha Посмотреть профиль Найти все сообщения от AxMuha
 
Регистрация: 17.06.2020
Сообщений: 5

Как выполнить что-нибудь после серии 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)

Куда запрягать?
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2020, 15:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А сервер не может вернуть все записи диапазона от deliveryDate1 до deliveryDate2?
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2020, 15:27
Новичок на форуме
Отправить личное сообщение для AxMuha Посмотреть профиль Найти все сообщения от AxMuha
 
Регистрация: 17.06.2020
Сообщений: 5

Сервер многое что может.. Вопрос же не в этом. А как в принципе решаются такие задачи?

Сообщение от laimas Посмотреть сообщение
А сервер не может вернуть все записи диапазона от deliveryDate1 до deliveryDate2?
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2020, 15:32
Новичок на форуме
Отправить личное сообщение для AxMuha Посмотреть профиль Найти все сообщения от AxMuha
 
Регистрация: 17.06.2020
Сообщений: 5

Мне в голову приходит только вариант выполнять ajax запросы синхронно
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2020, 16:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Что такое deliveryDate? Если нужно запросить сервер по ряду конкретных значений, значит нужно отправить ему массив этих значений, а если диапазон, то два значения - мин/макс.

Если это параметры запроса к базе и это массив значений, то это будет один запрос к базе как WHERE field_name IN(N1, N2, N3, ..., Nn), если диапазон, то WHERE field_name BETWEEN N1 AND N2.

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

Последний раз редактировалось laimas, 17.06.2020 в 16:13.
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2020, 19:12
Новичок на форуме
Отправить личное сообщение для AxMuha Посмотреть профиль Найти все сообщения от AxMuha
 
Регистрация: 17.06.2020
Сообщений: 5

Спасибо, что хотите мне помочь. Но ситуации бывают разные, меня сейчас интересует вопрос по java script.
Синхронный вариант работает, но блокирует основной поток, что плохо.
У меня возникла идея, что можно сначала посмотреть, посмотреть, сколько элементов нужно будет обойти. Установить переменную с этим значением и в каждом вызове функции вычитать единичку. И соответственно проверять, как дошли до нуля - значит последний вызов и можно дернуть callback.
Но выглядит это все как-то не надежно...

Сообщение от laimas Посмотреть сообщение
В принципе гонять в цикле запросы к серверу, это плохо,
Ответить с цитированием
  #7 (permalink)  
Старый 17.06.2020, 19:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

AxMuha,
https://learn.javascript.ru/promise
Ответить с цитированием
  #8 (permalink)  
Старый 17.06.2020, 19:47
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от AxMuha
У меня возникла идея
А других идей нет? Я ведь тоже говорю о JS, только не

$(".chkInvoice").each(function () {
    if ($(this).is(':checked')) {


а

$.map($(".chkInvoice:checked"), function ... //вернет массив значения выбранных флажков


Затем передать его асинхронным запросом на сервер, а далее сделать один надлежащий запрос к базе и вернуть также только то что нужно - индексный массив значений ID, то есть и этого не потребуется на клиенте:

if (invoice.Status.toLowerCase() == "completed") invoiceIds.push(invoice.Id);


у вас уже будет готовый массив, используйте.

Кроме этого сервер и при формировании страницы его может прописать эти данные в тело ее как js-объект и вообще запроса не потребуется. Вы что к серверу доступа не имеете или какая проблема, почему такими граблями пытаетесь решать задачу?
Ответить с цитированием
  #9 (permalink)  
Старый 18.06.2020, 08:45
Новичок на форуме
Отправить личное сообщение для AxMuha Посмотреть профиль Найти все сообщения от AxMuha
 
Регистрация: 17.06.2020
Сообщений: 5

Спасибо, Рони.
Похоже, это как раз то, что мне нужно

Сообщение от рони Посмотреть сообщение
AxMuha,
https://learn.javascript.ru/promise
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как настроить отладку ajax запросов на сервере в intellij idea biilsun AJAX и COMET 1 04.04.2018 10:20
Подскажите, как сюда прикрутить ajax? drkrol jQuery 9 25.09.2015 20:47
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
как обратиться к кнопке после ajax shevon jQuery 5 29.01.2014 22:43
Мой собственный башорг в скайпе))) devote Оффтопик 81 03.10.2012 00:56