Как отправить несколько однотипных асинхронных Ajax запросов, только после успешного ответа прошло запроса?

Зачем так нужно ? Если отправить одним запросом, то то Google Chrome ждет около 30 секунд ответа, а потом сбрасывает соединение. Нужно их отправлять асинхронно, но каждый после завершения другого, а в конце вывести, что отправка закончена. Как быть ?

for (var i = 0; i < imgData.imgSrc.length; i++)
                    {

                        var imageOne = {
                            camera:[imgData.camera[i]],
                            copyright:[imgData.copyright[i]],
                            date:[imgData.date[i]],
                            imgSrc:[imgData.imgSrc[i]],
                            imgTitle:[imgData.imgTitle[i]],
                            latitude:[imgData.latitude[i]],
                            longitude:[imgData.longitude[i]],
                            size:[imgData.size[i]]
                        };

                        jQuery.ajax({
                            type: "POST",
                            url: "/Map/AddDataImage/",
                            cache: false,
                            data: {image_data: imageOne,
                                image_data_from_sites: $.makeArray(uploadedImgFromUrl), 'item_id':data.item_id},
                            //async: false,
                            dataType: 'json',
                            success: function (data) {
                                //bootbox.confirm('Thank you! The attraction will appear on the website after reviewing by our team.', function () {
                                    
                                //});
                            }
                        });
                    }
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
например, рекурсивный вызов:
function sendByOne(imgData, i) {
    var imageOne = {
        camera:[imgData.camera[i]],
        copyright:[imgData.copyright[i]],
        date:[imgData.date[i]],
        imgSrc:[imgData.imgSrc[i]],
        imgTitle:[imgData.imgTitle[i]],
        latitude:[imgData.latitude[i]],
        longitude:[imgData.longitude[i]],
        size:[imgData.size[i]]
    };

    jQuery.ajax({
        type: "POST",
        url: "/Map/AddDataImage/",
        cache: false,
        data: {image_data: imageOne,
            image_data_from_sites: $.makeArray(uploadedImgFromUrl), 'item_id':data.item_id},
        //async: false,
        dataType: 'json',
        success: function (data) {
            //bootbox.confirm('Thank you! The attraction will appear on the website after reviewing by our team.', function () {
                
            //});

            i++;
            if (i < imgData.imgSrc.length) {
                sendByOne(imgData, i);
            }
        }
    });
}

sendByOne(imgData, 0);


Если нужно собирать все ответы, и/или делать что-то после завершения всех запросов, то лучше все это завернуть в промисы и уже на них логику делать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы