Мой 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-сервис на две части. Если вторая часть зависит от первой, вместо отправки двух запросов одновременно, отправьте второй запрос, когда первый возвращается.
Другими словами, в своем обратном вызове успеха вы должны уведомить пользователя о завершении первой операции, и вы перейдете к второй операции, чей обратный вызов успеха сообщит, что вторая операция завершена.
Другой подход, отличный от предложенного стивло, заключается в использовании своего рода длинного опроса, подобного тому, который объясняется в этом ответе:
Как реализовать базовый «длинный опрос»?
Не так просто и с более сложной конфигурацией сервера.