2017-08-11 203 views
-2

我试图在用户完成Webform时发送触发电子邮件。尝试通过AJAX调用PHP函数时发生500错误

但是我收到以下错误

enter image description here

欣赏关于如何解决此错误的任何建议。

JS文件,将调用PHP函数

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

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 = '[email protected]'; 

    // 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; 
} 
?> 
+4

请检查您的服务器上的PHP错误日志。 – DarthJDG

+0

在ajax中提供完整的url – GYaN

+0

当您通过浏览器本身访问php文件时会发生什么?你也有错误500吗? –

回答

1

我不知道这将解决您的问题或没有,但是这可能会帮助你。

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

  2. 如果您的服务器期望在请求中有json负载,那么您需要执行JSON.stringify()有效负载以将JS对象转换为JSON对象。 即。数据:JSON.stringify({data:dataString,senderAddress:email})

相关问题