отправка форм с помощью jquery и ajax

Leonid

PHP? нет, не слышал...
Делаю добавление комментариев на сайте с помощью jquery и ajax

Например, функция добавления комментария к фото

PHP:
function addcomment()
{

// 1. добавление комментария в БД

//  2. формирование ответа в формате json
$response = array('type'=>'success', 'msg' => 'Коммент успешно добавлен');
print json_encode($response);


// 3. отправка уведомлений на email админу сайта или модератору, владельцу фото
// может занимать до нескольких десятков секунд

exit;
}

Если отключить отправку уведомлений, то jquery делает все очень быстро и красиво - форма "свертывается", на несколько секунд появляется уведомление об успешном добавлении, потом плавно "растворяется". Но отправка почты это все замедляет, форма подвисает.. Как сделать, чтобы скрипт не дожидался отправки почты, а сразу выдавал на страницу с формой результат?
Стал экспериментировать с ob_flush(), но добавление этой функции вообще не приводило к возврату результатов print json_encode(...), хотя коммент добавлялся.
 

Leonid

PHP? нет, не слышал...
PS несколько десятков секунд не в случае комментария к фото, а например на форуме, там в теме может быть несколько десятков подписчиков, которым надо отправить почту.
 

zerkms

TDD infected
Команда форума
Операции, которые занимают много времени и могут вообще не выполниться - нужно выполнять асинхронно.

Потому, создайте в базе табличку с очередью задач. Из этого вашего скрипта туда кладите задание, а из специально созданного скрипта-воркера, который стартует раз в минуту и делает работу - делайте все грязные дела.
 
  • Like
Реакции: HEm

Leonid

PHP? нет, не слышал...
zerkms
Спасибо, так и сделал. Все работает замечательно!
 
Сверху