Mailchimp API(v3.0)有一个很大的更新,许多jQuery插件已经过时,POST
上的form.submit()
订阅者已经过时了。
阅读v3.0 docs之后:
Managing subscribers建议使用以下JSON对象格式:
{
"email_address": "urist.mcvankab@freddiesjokes.com",
"status": "subscribed",
"merge_fields": {
"FNAME": "Urist",
"LNAME": "McVankab"
}
}
以下API的根端点列出了资源:
https://<dc>.api.mailchimp.com/3.0/
所以这是我的form.submit()
代码,其中包含jQuery Ajax POST
请求:
$(document).ready(function(){
var mcForm = $('#mailchimpForm');
var mailchimp = {};
mailchimp.dc='us5';
mailchimp.id='xxxxxxxx';
var url = '//' + mailchimp.dc + '.api.mailchimp.com/3.0/lists/' + mailchimp.id + '/members/';
function beginMailchimpPost(data){
var params = JSON.stringify(data);
$.ajax({
url: url,
method: 'POST',
data: params,
dataType: 'jsonp',
contentType: 'application/json; charset=utf-8',
error: function(res, text){
console.log('Err', res);
},
success: function(res){
console.log('Success', res);
}
});
}
});
这是JSON.stringify(data)
对象:
{"email_address":"email@mail.com","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}}
我收到以下错误:
GET http://... 401 (Unauthorized)
Err Object {readyState: 4, status: 404, statusText: "error"}
可能出现什么问题?
这是Mailchimp's API v3.0 docs(列表成员集合)的链接。
答案 0 :(得分:2)
不幸的是,无法对前端Mailchimp API发出请求。
注意MailChimp不支持我们的API的客户端实现 因暴露的潜在安全风险而使用CORS请求 帐户API密钥。
答案 1 :(得分:2)
我这样做的方法是使用你的AJAX代码,但删除所有MailChimp的东西,并将发布数据发送到PHP文件。我用了这段代码:
我只删除了订阅单个用户所需的部分,它就像一个魅力。对于错误报告,您可以检测PHP端的错误并将HTTP状态发送到AJAX。
答案 2 :(得分:0)
您因为没有传递API密钥而获得401。
您需要将以下内容添加到您的ajax电话中:
beforeSend: function(xhr) { xhr.setRequestHeader("Authorization",
"Basic " + btoa("api:" + mailchimp_api_key)); };
mailchimp_api_key是您帐户的密钥。有关使用api的auth的更多信息,请查看http://kb.mailchimp.com/api/article/api-3-overview。
答案 3 :(得分:-1)
您需要在params中添加API密钥,如下所示;
{
"apikey": "your key here",
"email_address": "urist.mcvankab@freddiesjokes.com",
"status": "subscribed",
"merge_fields": {
"FNAME": "Urist",
"LNAME": "McVankab"
}
}
然后你需要将datetype从“jsonp”更改为“json”。 “jsonp”仅限GET,不适用于POST方法。
您需要做的最后一件事是允许跨域脚本编写;