1

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

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

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

有首选方法吗?

4

3 回答 3

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 );
   });

});
于 2013-01-28T20:51:26.230 回答
0

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

于 2013-01-28T20:42:50.160 回答
0

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

也就是说,在脚本中的某处,如果设置了一个标志(例如通知标志),它将分派一个类似 '../private/notify.php' 的进程......看看如何将参数传递给命令行调用php。还有直接调用 sendmail 的选项。

确保在尝试之前对其进行一些测试;您需要确保:

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