我正在制作一个订阅时事通讯的表格,为此我使用ajax请求来调用mailchimp api。 api单独工作,我测试过它。 但是在ajax代码中,我在发送和完成部分之前发出警告它是正确的,但是在成功时它什么也没做。
这是我的代码:
HTML表单代码
<form id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate">
<input type="email" value="" name="EMAIL" class="email" id="useremail" placeholder="Type our mail address" required>
<input type="button" value="subscribe" name="subscribe" id="mc-embedded-subscribe" class="mc-button" >
<div id="subscribe-result">
</div>
</form>
脚本代码
<script>
$("#mc-embedded-subscribe").click(function() {
var email = $('#useremail').val();
$.ajax({
type: 'post',
url: "newslatter.php",
dataType: 'json',
data: 'useremail='+email,
beforeSend: function() {
},
complete: function() {
},
success: function(data)
{
alert("enter success");
if(data.type == 'error')
{
output = "<a color='red'>"+data.text+"</div>";
}else{
output = data.text;
}
$("#subscribe-result").html(output);
}
});
});
</script>
这里是 NewsLatter的PHP代码
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//check if its an ajax request, exit if not
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
//exit script outputting json data
$output = json_encode(
array(
'type' => 'error',
'text' => 'Request must come from Ajax'
));
die($output);
}
//check $_POST vars are set, exit if any missing
if ( !isset($_POST["useremail"]) ) {
$output = json_encode(array('type' => 'error', 'text' => 'Input fields are empty!'));
die($output);
}
//Sanitize input data using PHP filter_var().
$useremail = filter_var(trim($_POST["useremail"]), FILTER_SANITIZE_EMAIL);
//additional php validation
if (!filter_var($useremail, FILTER_VALIDATE_EMAIL)) { //email validation
$output = json_encode(array('type' => 'error', 'text' => 'Please enter a valid email!'));
die($output);
}
$list_id = '***secret***';
$api_key = '***secret***';
$data_center = substr($api_key,strpos($api_key,'-')+1);
$url = 'https://'. $data_center .'.api.mailchimp.com/3.0/lists/'. $list_id .'/members';
$json = json_encode([
'email_address' => $email,
'status' => 'subscribed', //pass 'subscribed' or 'pending'
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status_code!=200) {
$output = json_encode(array('type' => 'error', 'text' => 'Something Went Wrong'));
die($output);
} else {
$output = json_encode(array('type' => 'message', 'text' => 'Hi ' . $username . ' Thank you for your email'));
die($output);
}
?>
答案 0 :(得分:0)
添加
header('Content-Type: application/json');
在发送json响应之前在php中
也是一个大括号&#34;}&#34;需要在文件和文件中关闭块
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
答案 1 :(得分:0)
此行存在问题
$json = json_encode([
'email_address' => $email,
'status' => 'subscribed', //pass 'subscribed' or 'pending'
]);
变量名称为 $ useremail ,而非$ email,因此请将其更改为
$json = json_encode([
'email_address' => $useremail,
'status' => 'subscribed', //pass 'subscribed' or 'pending'
]);
新闻代码:
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//check if its an ajax request, exit if not
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
//exit script outputting json data
$output = json_encode(
array(
'type' => 'error',
'text' => 'Request must come from Ajax'
));
die($output);
}
//check $_POST vars are set, exit if any missing
if ( !isset($_POST["useremail"]) ) {
$output = json_encode(array('type' => 'error', 'text' => 'Input fields are empty!'));
die($output);
}
//Sanitize input data using PHP filter_var().
$useremail = filter_var(trim($_POST["useremail"]), FILTER_SANITIZE_EMAIL);
//additional php validation
if (!filter_var($useremail, FILTER_VALIDATE_EMAIL)) { //email validation
$output = json_encode(array('type' => 'error', 'text' => 'Please enter a valid email!'));
die($output);
}
$list_id = '***secret***';
$api_key = '***secret***';
$data_center = substr($api_key,strpos($api_key,'-')+1);
$url = 'https://'. $data_center .'.api.mailchimp.com/3.0/lists/'. $list_id .'/members';
$json = json_encode([
'email_address' => $useremail,
'status' => 'subscribed', //pass 'subscribed' or 'pending'
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status_code!=200) {
$output = json_encode(array('type' => 'error', 'text' => 'Something Went Wrong'));
die($output);
} else {
$output = json_encode(array('type' => 'message', 'text' => 'Hi ' . $username . ' Thank you for your email'));
die($output);
}
}