如何通过AJAX从PHP文件中获取多个响应?

我的PHP文件执行2个操作:1。将表单中的数据提交到db表,2。发送电子邮件。 我想做的是通过ajax显示状态消息。 例如:“首先完成操作,请等待第二个”然后当第二个操作完成时显示下一个消息“第二个操作也完成”。 现在我的ajax看起来像那样。 我怎么修改它?

//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服务分为两部分。 如果第二部分依赖于第一部分,而不是同时发送两个请求,则在第一部分返回时发送第二个请求。

换句话说,在成功回调中,您将通知用户第一个操作已完成,然后继续调用第二个操作,其成功回调将通知第二个操作已完成。

另一种不同于stivlo建议的方法是使用一种类似于这个答案中解释的长轮询:

如何实施基本的“长轮询”?

不是那么简单,而且在服务器配置上存在更多技术问题。