【发布时间】:2015-10-19 19:37:29
【问题描述】:
自从将我的网站移至 https 后,mailchimp api 不再适用于标准的 json ajax 调用。这些调用现在呈现同源策略错误。我不知道为什么会这样,因为我在我自己的服务器上调用一个 url。经过一番调查,我推测 JSONP 是我唯一的选择。以下脚本正确发布到 mailchimp 但我无法获得成功的响应。
$.ajax({
type:"GET",
url:"https://mysite/book_subscription_process.php?jsonp=?",
data:{fname: $('#fNBookId').val(), lname: $('#lNBookId').val(), email: $('#eBookId').val()},//only input
dataType: "jsonp",
cache: false,
async: false,
jsonp: false,
success: function(data){
console.log('success');
if(data.message == 'failure')
{
alert('Error','There was an error processing your subscription. Please try again.');
}else if(data.message == 'success')
{
alert('success');
}else{
console.log(data.message);
}
},
error: function (xhr, ajaxOptions, thrownError, data) {
// console.log(data.message);
console.log('failure');
alert(xhr.status);
alert(thrownError);
}
});
服务器端:
<?php
header("content-type: text/javascript");
if(isset($_GET['jsonp']))
{
$obj->fname = $_GET['fname'];
$obj->lname = $_GET['lname'];
$obj->email = $_GET['email'];
$obj->success = 'success';
$obj->failure = 'failure';
}
header("Content-type: application/json");
$MailChimp = new \Drewm\MailChimp($api_key);
$book = array('id' => $group_id, 'groups' => array('Book'));
$merge_vars = array('FNAME'=> $obj->fname,
'LNAME'=>$obj->lname,
'GROUPINGS'=>array($book)
);
$result = $MailChimp->call('lists/subscribe', array(
'id' => $list_id,
'email' => array('email'=>$obj->email),
'merge_vars' => $merge_vars,
'double_optin' => false,
'update_existing' => true,
'replace_interests' => false,
'send_welcome' => false,
));
if ( ! empty( $result['leid'] ) ) {
echo json_encode($obj->success);
}
else{
echo json_encode($obj->failure);
}
?>
正如我上面所说,信息已正确发布到 mailchimp。然而,每次,ajax 调用都会出错。我得到了 200 OK 但没有调用 Jquery[bunch of numbers]。 json_encode 成功语句在服务器上执行。有没有我应该处理服务器端响应的特殊方法?还是我应该在客户端做一些不同的事情?提前致谢。
【问题讨论】:
标签: php jquery ajax jsonp mailchimp