Как получить несколько ответов из файла PHP через AJAX?

Мой PHP-файл делает 2 операции: 1. Отправляет данные из формы в таблицу db, 2. Отправляет электронную почту. Я хочу сделать это, чтобы показать сообщения о статусе через ajax. Например: «Первая операция сделана, подождите, подождите второй», а затем, когда будет завершена вторая, вы увидите следующее сообщение «Second op. Done too». Теперь мой аякс выглядит так. Как я могу его изменить?

//add status data to form form.data('formstatus', 'submitting'); if (validate()) { //send data to server for validation $.ajax({ url: formUrl, type: formMethod, dataType: "json", data: formData, success: function (data) { $.notifyBar({ cls: data.status, html: data.message }); form.data('formstatus', 'idle'); } }); } 

в блоке успеха вы можете выполнить другой вызов ajax. Это самое простое. Вы можете сделать это с помощью функций .success (), .ajaxSucces (), .complete () или .then () следующим образом: $ .ajax (…). Success (…);

в идеале вы вставляете код в функцию, например

 $.ajax({ url: formUrl, type: formMethod, dataType: "json", data: formData, success: function (data) { notifyResponse(data); form.data('formstatus', 'idle'); sendMail(); } }); function sendMail() { $.get(mailUrl, function(data) { // or $.post(... notifyResponse(data); }); } function notifyResponse(data) { $.notifyBar({ cls: data.status, html: data.message }); } 

Если вам нужно выполнить две операции с разными временами выполнения, просто отправьте два разных запроса AJAX и получите ответы от них.

Разделите свой PHP-сервис на две части. Если вторая часть зависит от первой, вместо отправки двух запросов одновременно, отправьте второй запрос, когда первый возвращается.

Другими словами, в своем обратном вызове успеха вы должны уведомить пользователя о завершении первой операции, и вы перейдете к второй операции, чей обратный вызов успеха сообщит, что вторая операция завершена.

Другой подход, отличный от предложенного стивло, заключается в использовании своего рода длинного опроса, подобного тому, который объясняется в этом ответе:

Как реализовать базовый «длинный опрос»?

Не так просто и с более сложной конфигурацией сервера.