2011-11-12 51 views
4

我的PHP文件做2个操作:1.从表单提交数据到数据库表,2.发送电子邮件。我想要做的是通过ajax显示状态消息。例如:“第一次操作完成,请等待第二次”,然后当第二次完成后,显示下一条消息“第二次操作完成”。现在我的阿贾克斯看起来就是这样。我如何修改它?如何通过AJAX从PHP文件获取多个响应?

//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

在成功阻止您可以执行另一个 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 
    }); 
} 
+0

看起来像sendMail(func)? –

+0

完全像你的$ .ajax函数,另一个url。主要的一点是,你可以存储有用的信息在会话内发送邮件,或者用ajax发送邮件。我更喜欢第一种方法,因为发送的数据较少,但秒数允许您避免使用另一个层(会话保存/检索服务器端语言部分)。 – roselan

3

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

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

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

+0

有无论如何要从一个和唯一的ajax功能吗?请给出一个示例代码来描述你的描述 –

+0

是的,但是你不能给出有关这两个操作的部分反馈,这两个操作将会是一个。示例代码?像在roselan的例子中,'sendMail()'函数将是对另一个服务的另一个'$ .ajax'调用。 – stivlo

0

从一个由stivlo提出不同的另一种方法是使用一种长轮询的像在这个答案解释:

How do I implement basic "Long Polling"?

不是那么简单,并且更多的技术问题,abaout服务器配置。

相关问题