Javascript 尝试通过AJAX调用PHP函数时出错500

Javascript 尝试通过AJAX调用PHP函数时出错500,javascript,php,email,http-status-code-500,Javascript,Php,Email,Http Status Code 500,我试图在用户完成Web表单时发送一封电子邮件 然而,我得到以下错误 感谢您就如何解决此错误提供的任何建议 调用php函数的JS文件 $(function() { $('.error').hide(); $(".request_demo").click(function() { // validate and process form here $('.error').hide(); var email = $("#email").val(); if (email ==

我试图在用户完成Web表单时发送一封电子邮件

然而,我得到以下错误

感谢您就如何解决此错误提供的任何建议

调用php函数的JS文件

$(function() {
  $('.error').hide();
  $(".request_demo").click(function() {

  // validate and process form here
  $('.error').hide();
  var email = $("#email").val();
  if (email == "") {
    $("#email_error").show();
    $("#email").focus();
    return false;
  }

  var email = $("#email").val();

  var dataString = '<p><strong>Email: </strong> ' + email + '</p>';
  $.ajax({
   type: "POST",
   url: "/script/send.php",
   data: { data: dataString, senderAddress: email },
   success: function() {
     // show a success message to your visitors
     // clear input field values

     $("#email").val('');    
   }
  });
  return false;  
 });
});
$(函数(){
$('.error').hide();
$(“.request_demo”)。单击(函数(){
//在此验证并处理表单
$('.error').hide();
var email=$(“#email”).val();
如果(电子邮件==“”){
$(“#电子邮件错误”).show();
$(“#电子邮件”).focus();
返回false;
}
var email=$(“#email”).val();
var dataString='电子邮件:'+Email+'

'; $.ajax({ 类型:“POST”, url:“/script/send.php”, 数据:{data:dataString,senderAddress:email}, 成功:函数(){ //向访问者显示成功消息 //清除输入字段值 $(“#电子邮件”).val(“”); } }); 返回false; }); });
PHP文件

<?php
  if( isset($_POST) ){

    $postData = $_POST;
    $mailgun = sendMailgun($postData);

    if($mailgun) {
     echo "Great success.";
    } else {
      echo "Mailgun did not connect properly.";
    }
 }

 function sendMailgun($data) {

   $api_key = 'xxxxxxx1234';
   $api_domain = 'our_domain';
   $send_to = 'some@email.com';

   // sumbission data
   $ipaddress = $_SERVER['REMOTE_ADDR'];
   $date = date('d/m/Y');
   $time = date('H:i:s');

   // form data
   $postcontent = $data['data'];
   $reply = $data['senderAddress'];  

   $messageBody = "<p>You have received a new message from the contact form on your website.</p>
         {$postcontent}
          <p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";

   $config = array();
   $config['api_key'] = $api_key;
   $config['api_url'] = 'https://api.mailgun.net/v2/'.$api_domain.'/messages';

   $message = array();
   $message['from'] = $reply;
   $message['to'] = $send_to;
   $message['h:Reply-To'] = $reply;
   $message['subject'] = "New Message from your Mailgun Contact Form";
   $message['html'] = $messageBody;

   $curl = curl_init();

   curl_setopt($curl, CURLOPT_URL, $config['api_url']);
   curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
   curl_setopt($curl, CURLOPT_USERPWD, "api:{$config['api_key']}");
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
   curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
   curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
   curl_setopt($curl, CURLOPT_POST, true); 
   curl_setopt($curl, CURLOPT_POSTFIELDS,$message);

   $result = curl_exec($curl);
   curl_close($curl);
   return $result;
 }
?>

我不确定这是否能解决您的问题,但这可能会对您有所帮助

  • 请检查服务器所需的数据类型。在ajax请求中,您没有提到任何内容类型。由于这是一个POST请求,jQuery会将表单数据视为默认内容类型。正如我所看到的,您提供了一个JS对象作为数据,默认情况下,在将请求发送到服务器之前,它将被转换为查询字符串

  • 如果您的服务器在请求中需要json负载,那么您需要执行json.stringify()将JS对象转换为json对象。 ie.data:JSON.stringify({data:dataString,senderAddress:email})


  • 请检查服务器上的PHP错误日志。在Ajax中提供完整url当您通过浏览器本身访问PHP文件时发生了什么?您是否也在那里得到错误500?您从服务器得到的响应是什么?为什么设置
    $postData=$\u POST
    ,然后用
    $postData
    调用sendMailgun函数,为什么不直接用$\u POST调用sendMailgun。。。或者直接在sendMailgun中引用$\u POST-只是一个想法,为了可读性