Как построить весь набор данных перед отправкой AJAX -Jquery

У меня есть система, которая позволяет администратору добавлять менеджеров в кампанию из таблицы. Таблица выглядит примерно так

<tr>
<td>Checkbox</td>
<td>Last name, First name</td>
<td>Employee Id #</td>
</tr>

В настоящее время, когда нажимается кнопка "Добавить менеджера", я передаю id менеджера и значение "checked" с помощью этой функции

<script>
    function addMgrs(){
        dict = {}
        $('#potentialReviewers tr').each(function() {
            var userPid = $(this).find('td').eq(2).text()
            var addMgrBox = $(this).find('.addMgrBox').attr('value')
            if (addMgrBox == 'checked') {
                dict[userPid] = addMgrBox }
        // Create the Post request, pass the csrf_token in the header of the request
        $.ajax({
                url: '/campaign-view/' + '{{ campaign.id }}' + "/",
                type: 'POST',
                headers: {'X-CSRFtoken': '{{ csrf_token }}'},
                data: dict,
                dataType: 'json'
            })
        })
    }
</script>

Что это делает, так это выполняет итерации по таблице, создает ответ JSON и передает его обратно в представление Django, чтобы выполнить внутреннюю обработку. Моя проблема заключается в том, что для каждой строки он посылает POST-запрос, что значительно увеличивает время, необходимое для завершения процесса. Я бы хотел, чтобы он создавал весь словарь перед отправкой ответа, но не могу понять, как это сделать. Любая помощь будет принята с благодарностью.

Итак, как указал n1md7 в комментариях, мне просто нужно было переместить AJAX-запрос за пределы цикла. Вот как теперь выглядит блок кода:

<script>
    function addMgrs(){
        dict = {}
        $('#potentialReviewers tr').each(function() {
            var userPid = $(this).find('td').eq(2).text()
            var addMgrBox = $(this).find('.addMgrBox').attr('value')
            if (addMgrBox == 'checked') {
                dict[userPid] = addMgrBox }
            })
        // Create the Post request, pass the csrf_token in the header of the request
        $.ajax({
                url: '/campaign-view/' + '{{ campaign.id }}' + "/",
                type: 'POST',
                headers: {'X-CSRFtoken': '{{ csrf_token }}'},
                data: dict,
                dataType: 'json'
        })
    }
</script>

Как вы можете видеть, теперь я закрываю цикл перед тем, как сделать запрос, и это превратилось из 4+ минутного процесса в почти мгновенный. Спасибо n1md7

Вернуться на верх