javascript — добавить вывод после каждого цикла в функции обратного вызова ajax

Более двух часов я пытался найти оптимальный способ отображения результата, полученного с помощью функции обратного вызова ajax. Позвольте мне объяснить, что именно я хочу сделать, чтобы лучше понять …

У меня есть кнопка «отправить», по событию щелчка я определил функцию, которая отправляет $ category_id на другую страницу, где затем я собираю всех получателей из базы данных и отправляю для каждого по электронной почте. Теперь весь процесс работает нормально, но после каждого цикла:

(foreach ($recipients as $recipient))
{send_mail();
echo "email sent successfully to ....";}

Я возвращаю эхо-заявление о том, что электронная почта была правильно отправлена ​​этому получателю.
Функция Javascript определена для добавления этих результатов эха в div, но вместо отображения каждого оператора после визуализации она собирает их все и отображает сразу.

$.ajax({
async: true,
url: 'send_emails.php?category='+category,
success: function(r){
$('#status').append(r); //this happens all at once
}
});

Есть ли лучшая идея для достижения моей цели?

заранее спасибо

0

Решение

Success событие вызванного ajax запускается, когда статус XHR изменяется на 200 (Успешно). Это происходит только тогда, когда серверная часть завершает обработку.

Что вам нужно, это проверить XHR readyState приписывать. Который установлен на «3» во время обработки запроса. Затем вы можете отправлять обновления из вашего PHP-скрипта на веб-страницу.

Вот хороший блог, который объясняет, как это сделать

1

Другие решения

Я думаю, проблема в том, что вы должны пойти дальше и сказать пользователю, что электронная почта успешно отправлена ​​в вашем обратном вызове ajax -> там вы знаете, если (! Err) тогда ваш запрос был успешным -> вывести, что ваше сообщение было успешно отправлено.

То, что каждое сообщение отображается «сразу», связано с тем, что они помещаются в стек и называются «ammediatly» — ваш ajax-вызов асинхронен с этим, и обратный вызов запускается при фактической отправке почты.

0