尝试通过AJAX调用PHP函数时发生500错误
问题描述:
我试图在用户完成Webform时发送触发电子邮件。尝试通过AJAX调用PHP函数时发生500错误
但是我收到以下错误
欣赏关于如何解决此错误的任何建议。
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;
}
?>
答
我不知道这将解决您的问题或没有,但是这可能会帮助你。
请检查您的服务器期望的数据类型。在你的ajax请求中你没有提到任何Content-Type。由于这是一个POST请求,因此jQuery会将表单数据视为默认的Content-Type。正如我所看到的,您提供了一个JS对象作为数据,默认情况下它会在将请求发送到服务器之前转换为查询字符串。
如果您的服务器期望在请求中有json负载,那么您需要执行JSON.stringify()有效负载以将JS对象转换为JSON对象。 即。数据:JSON.stringify({data:dataString,senderAddress:email})
请检查您的服务器上的PHP错误日志。 – DarthJDG
在ajax中提供完整的url – GYaN
当您通过浏览器本身访问php文件时会发生什么?你也有错误500吗? –