2017-08-11 159 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})

相關問題