我可以调用PHP方法异步运行吗?

时间:2013-01-28 20:40:53

标签: php jquery

当用户查看某个个人资料页面时,我需要向最终用户发送电子邮件,但是如果可能的话,我希望异步执行此操作。可以用PHP完成吗?在呈现页面的其余部分之前,我真的不想等待PHP函数完成。它应该对用户无缝。

或者这是客户端更好的解决方案:

$.post("msg.php?user=xxx", function(data) {
    ....   
}, "json");

有首选方法吗?

3 个答案:

答案 0 :(得分:4)

如果您想要互动,请转到ajax()方法;如果您只想点击一个监听器脚本(从而初始化一组PHP功能),请使用post()这是同一方法的简写版本:

$(function() {

   // If you just want to activate a listener script (with no interaction)
   $.post('/path/to/script.php');

   // If you want to receive data back from your script for use in the DOM
   $.ajax({
      type: "POST",
      url: "/path/to/script.php",
      data: { name: "John", location: "Boston" }
   }).done(function( response ) {
      alert( response );
   });

});

答案 1 :(得分:0)

让您的页面执行异步操作的最佳方法是使用AJAX,如您所建议的那样。

答案 2 :(得分:0)

如果您遇到服务器端解决方案,可以使用proc_open或shell_exec执行脚本。根据您的环境,可能会有一些限制,但这通常是多线程PHP的快速而肮脏的方式,因此可以异步发生。

也就是说,在脚本的某个地方,如果设置了一个标志(例如通知标志),它将调度一个像'../private/notify.php'这样的进程...看看如何将参数传递给命令php的行调用。还可以选择直接调用sendmail。

确保在尝试之前先测试一下;你需要确保:

  1. 您可以安全且成功地生成新线程
  2. 您无需等待该线程完成以完成当前脚本执行
  3. 该线程将安全地完成并自行退出,无论是出错还是成功
  4. 有一种方法可以处理错误(例如邮件失败),以便您可以调试问题。日志文件可能是最好的答案。