javascript - 如何显示由 ajax 调用运行的 PHP 文件的回显?

标签 javascript php ajax echo catch-block

我正在从事的一个项目要求我在 Joomla 内构建一个邮件表单。

SO 聊天中的一些人建议我使用 PHPmailer - 但我注意到它包含在 joomla 包中,而且我真的不想再次加载它,所以我阅读了一些有关 jFactory 的文档,然后我就这么做了。

我想用一些 javascript 对输入字段进行个性化,因此我还使用 JS(具体来说,您可以在下面阅读的 ajax 调用)来命令服务器向我发送邮件。我不知道如果邮件字段驻留在表单所在的同一个 php 文件中,是否可以/更轻松地将邮件字段传递到邮件程序部分,因此我创建了一个调用 JS 的 html 表单和一个带有实际内容的单独 php发件人:

  • html 页面包含表单和一个空 div。
  • jQuery 脚本会修改运行时的表单(主要是根据其他选择更改下拉选项),并在单击“发送”按钮时进行变量验证,以便发送邮件(通过 ajax 调用外部 php 文件) )或输出错误消息(即“需要邮件地址”)。
  • php 文件实际上使用 jFactory 发送邮件。

整个事情工作正常,但我需要更多的测试,并且我无法从任何地方访问 php echo,包括 chrome 的检查器

我读到 echo 会自动保存到 JavaScript 中的“数据”变量中,但该变量不存在,如果我创建它(可能在错误的位置),它不会被填充。

我已经尝试过(在 php 脚本内)try/catch 和 if($mail->Send()) 方法来生成回显消息,但是,由于我从未在浏览器中运行 php 页面,所以我不知道两者是否有效。

如何将回显消息返回到我的 JS,以便我可以使用 console.log() 来读取它? 我无法在 Chrome 上安装扩展程序,也无法在不久的将来使用任何其他浏览器。但如果这是我唯一的选择,我想知道。

我将省略 header 、_JEXEC 函数和大部分文件,以便仅显示 php 调用部分。

js:

function send(datastr) {
  $.ajax({
    type: "POST",
    url: "formsend.php",
    data: datastr,
    cache: false,
    success: function(html) {
      $("#systemMessage").fadeIn("slow");
      $("#systemMessage").html('<span>Message successfully sent.</span>');
      $("#systemMessage").css("background-color", "#e1ffc0");
      setTimeout($("#systemMessage").fadeOut("slow"), 2000);
      console.log(data);
    }
  });
}

php:

try {
  define('JPATH_BASE', "../");
  define( 'DS', DIRECTORY_SEPARATOR );

  require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
  require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

  require ('libraries/joomla/factory.php');
  # require_once '../class.phpmailer.php';

  $name=$_REQUEST['name']; 
  $subject=$_REQUEST['subject'];
  $body=$_REQUEST['body']; 
  $from=$_REQUEST['from'];

  $to = "mymail@me.com";;

  # Invoke JMail Class
  $mail = JFactory::getMailer();
  # $mail->isSMTP; is not working

  # Set sender array so that my name will show up neatly in your inbox
  $sender = array($user, $name);
  $mail->setSender($sender);

  # Add a recipient
  $mail->addRecipient($to);
  $mail->ClearCCs();
  $mail->ClearBCCs();

  $mail->setSubject($subject);
  $mail->setBody($body);

  $mail->ClearAttachments();
  $mail->ClearCustomHeaders();

  # Send once you have set all of your options
  $mail->Send();
  echo "Message Sent OK\n";
}
catch (Exception $e) {
echo $e->getMessage();
}

最佳答案

您的变量必须相同。如果您使用的是 success: function (html) 那么您的 console.log 应该是 console.log(html) 否则如果您决定使用 data > 然后将 html 更改为 data

关于javascript - 如何显示由 ajax 调用运行的 PHP 文件的回显?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056895/

相关文章:

javascript - 将对象数组转换为数组对象

javascript - 从另一个页面加载 ajax 弹出窗口

json - AJAX、RESTful/Rest、JSON 和 JSONP 有什么区别?

javascript - Ajax/PHP - 无法识别自动完成值

javascript - react 组件与箭头函数奇怪的行为

javascript - 如何继续循环直到我的变量等于用户输入? JavaScript

javascript - 是否可以从 javascript 函数调用 telerik radgrid.databind()?

php - 使用 PHP/MySQL 自动化电子邮件营销事件,不知道如何构建查询

php 使用 preg_match 验证字符串

php - PHP 真实路径缓存是如何工作的?