【问题标题】:submit form with jquery / ajax / php without page refresh. Can't get form value to email使用 jquery / ajax / php 提交表单,无需刷新页面。无法将表单值发送到电子邮件
【发布时间】:2013-08-07 02:02:51
【问题描述】:

我希望使用 jquery/php 为跟踪号提交单个表单输入,以便页面不会刷新。我能够提交表单并将电子邮件发送给我,但无法弄清楚 $email_body 中的内容,因此它实际上通过电子邮件将表单信息发送给我。电子邮件将发送空白(所以我假设电子邮件在 PHP 代码中)。请参阅下面的 HTML/JS/PHP:

HTML:

    <form id="track-form" accept-charset="UTF-8" action="" size="30" class="form-inline" method="POST">
      <input class="focus" name="tracking" id="tracking" placeholder="tracking code" value="" type="text"/>
      <input class="btn btn-default btn-track" name="submit" type="submit" value="Send" />  
      <img id="success" style="display:none" src="img/check.png" />
      <br>    
      <label class="error" for="tracking" id="track-error">You must enter your tracking code!</label>  
    </form>

JS:

$(document).ready(function() { 
  $('.error').hide(); 
  $("#track-form").on('submit', function(e) {  


$('.error').hide();
  var track = $("input#tracking").val();
    if (track == "") {
        $("label#track-error").show();
        $("input#tracking").focus();
        return false;
    };   

$.ajax({
  url:'sendtrack.php',
  data:$(this).serialize(),
  type:'POST',
  success:function(data){
    console.log(data);
    $("#success").fadeIn(300); //=== Show Success Message== 
   },
});

e.preventDefault(); 

 });
});

PHP(问题出在哪里):

<?php

$track = $_POST['tracking'];

$email_from = 'info@website.com';
$email_subject = "New Tracking Info";
$email_body = "Tracking Number: $track".


$to = "email@gmail.com";
$headers = "From: $email_from \r\n";

//Send the email!
mail($to,$email_subject,$email_body,$headers);

?>

如果我保留 $email_body 原样,我会收到“500 服务器错误”。如果我将其留空,我会收到一封电子邮件,其中只有“email@gmail.com”,没有跟踪号码。

提前感谢您的帮助!

【问题讨论】:

  • 如果您将 msg 硬编码为电子邮件正文而不是将其留空,会发生什么情况?
  • “500 内部服务器错误”出现在 Google Chrome DOM 中
  • @SirBdon 你试过我下面的建议了吗?
  • @SirBdon 在用我的答案测试了你的代码之后,我确定是 Ajax 出了问题,它必须是。
  • @SirBdon 我很好奇,您使用的是哪个版本的 jQuery?

标签: php jquery ajax forms


【解决方案1】:

改变这一行:

$email_body = "Tracking Number: $track".

到:

$email_body = "Tracking Number: $track";

缺少结束分号。你有一个点。

你也可以试试:

$email_body = "Tracking Number: " . $track . "\r\n";

注意: 如下使用/添加标题,将减少被误认为垃圾邮件的机会。

例如:

$headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

因此,您的新标题应为:

$headers = 'From: $email_from' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

根据 PHP.net 上的mail() 函数http://php.net/manual/en/function.mail.php

【讨论】:

  • 我不得不使用:"$email_body = "追踪号码:" . $track . "\r\n";"让它工作。非常感谢!
  • @SirBdon 非常欢迎你,我很高兴你成功了,干杯(和平
【解决方案2】:

你最后没有分号

$email_body = "Tracking Number: $track".

【讨论】:

  • 我收到 500 内部服务器错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
相关资源
最近更新 更多