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

时间:2011-11-12 13:03:36

标签: php javascript ajax jquery

我的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');
                }
            });

        }

3 个答案:

答案 0 :(得分:3)

如果您要执行两个具有不同执行时间的操作,只需发送两个不同的AJAX查询,然后从中获取响应。

将PHP服务分为两部分。如果第二部分依赖于第一部分,而不是同时发送两个请求,则在第一部分返回时发送第二个请求。

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

答案 1 :(得分:3)

在成功块中,您可以执行另一个 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
    });
}

答案 2 :(得分:0)

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

How do I implement basic "Long Polling"?

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