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