Параллельные асинхронные вызовы Ajax от клиента - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть 20 пакетов данных в клиенте, и я отправляю один за другим на сервер через Ajax.Каждый вызов занимает примерно одну минуту, чтобы получить ответ.Есть ли способ заставить несколько таких запросов работать параллельно.

Я использовал обещание Jquery.Тем не менее, запрос все еще ожидает ответа предыдущего.

var dataPackets=[{"Data1"},{"Data2"},{"Data3"},{"Data4"},{"Data5"}, 
                 {"Data6"},{"Data7"},{"Data8"},{"Data9"},{"Data10"},
                 {"Data11"},{"Data12"},{"Data13"},{"Data14"},{"Data15"},{"Data16"}, 
                 {"Data17"},{"Data18"},{"Data19"},{"Data20"}];

$(dataPackets).each(function(indx, request) {

  var req = JSON.stringify(request);

  setTimeout({

    $.Ajax({
      url: "sample/sampleaction",
      data: req,
      success: function(data) {
        UpdateSuccessResponse(data);
      }

    });
  }, 500);
});

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

$. When.apply ($, functionArray) позволяет размещать массив функций, которые могут выполняться параллельно.Этот массив функций может быть создан динамически.Фактически, я делаю это для экспорта веб-страницы в PDF на основе элементов, отмеченных в списке переключателей.

Здесь я создаю пустой массив, var functionArray = [];затем на основе выбранных элементов я помещаю функцию в массив f = createPDF (checkedItems [i] .value)

$(document).ready(function () {           
    });
    function sleep(milliseconds) {
       var start = new Date().getTime();
       for (var i = 0; i < 1e7; i++) {
           if ((new Date().getTime() - start) > milliseconds){
               break;
           }
       }
    }
    function exportPDFCollection() {
        var f = null;
        var x = 0;
        var checkedItems = $("input:checked");
        var count = checkedItems.length;

        var reportList = $(checkedItems).map(
             function () { 
                 return $(this).next("label").text();
             })
            .get().join(",");

        var functionArray = [];
        var pdf = null;
        for (var i = 0; i < count; i++) {              
            f = createPDF(checkedItems[i].value)   
                    .done(function () {
                        pdf = checkedItems[x++].value;
                        alert('PDF =>  ' + pdf + ' created.');                            
                    })
                    .fail(function (jqxhr, errorText, errorThrown) {
                        alert('ajax call failed');
                    });
            functionArray.push(f);
        }
        $.when.apply($, functionArray)
        .done(function () {
            $.get("http://yourserver/ExportPage.aspx",{reports: reportList})
                .done(function () {                    
                       alert('PDF merge complete.');
                 })
                 .fail(function (jqxhr, errorText, errorThrown) {
                        alert('PDF merge failed.  Please try again.');
                 });                
            return true;
        });
    }        
    function createPDF(webPage) {
        return $.get(webPage);                
    }        
0 голосов
/ 09 февраля 2019

Конструкция when ... done в jQuery параллельно запускает операции ops.

$.when(request1(), request2(), request3(),...)
  .done(function(data1, data2, data3) {});

Вот пример: http://flummox -engineering.blogspot.com / 2015/12 / making-ваш-JQuery-АЯКС-звонки-parallel.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...