2014-11-11 3 views
0

Прошло более двух часов, пытаясь найти оптимальный способ отображения результата, отображаемого функцией обратного вызова 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

Я не понимаю, какова ваша цель, вы хотите отправлять электронные письма по одному? Или вы хотите отображать сообщения в разных элементах в html? –

+0

Нет. Я хочу отображать сообщение (успешно отправленное письмо электронной почты ...) на странице html каждый раз, когда отправляется электронное письмо. – arakibi

ответ

1

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

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

Here is a good blog that explains how to do it

+0

это именно то, что я хотел сделать! спасибо большое, вы сэкономили мой день – arakibi

+0

@ user3446783 приветствую :) – Hazaart

+0

Я думаю, что это не то, что я действительно хотел, этот сценарий повторял сообщение каждые 1 секунду или, как вы его определили, но я искал способ отображать сообщение после каждого цикла! – arakibi

0

Я думаю, что проблема в том, что вы должны идти вперед и сказать пользователю, что сообщение успешно отправлено в вашем АЯКС обратного вызова -> там вы знаете, если (ERR!), То ваш запрос был преуспевающим -> чтобы ваше сообщение было успешно отправлено.

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

Смежные вопросы