Mailchimp API V3 jQuery Ajax POST订阅者
Mailchimp API(v3.0)已经有了一个重大更新,许多jQuery插件已过期,以便POST
订户form.submit()
。Mailchimp API V3 jQuery Ajax POST订阅者
Managing subscribers提出了以下JSON对象格式:
{
"email_address": "[email protected]",
"status": "subscribed",
"merge_fields": {
"FNAME": "Urist",
"LNAME": "McVankab"
}
}
而下面的根端点的API列表资源:
https://<dc>.api.mailchimp.com/3.0/
阅读V3.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 protected]","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(列表成员集合)的链接。
因为你没有传入API密钥,所以你得到了401。
你需要你Ajax调用添加以下内容:
beforeSend: function(xhr) { xhr.setRequestHeader("Authorization",
"Basic " + btoa("api:" + mailchimp_api_key)); };
哪里mailchimp_api_key是您的帐户的关键。请参阅http://kb.mailchimp.com/api/article/api-3-overview以获取有关auth与api的更多信息。
但也:如果这是来自clientside JS,这里也会有一个跨站脚本问题。呼叫需要通过服务器代理,而不是依靠客户端。 – TooMuchPete
@TooMuchPete所以没有简单的方法通过客户端发送到mailchimp?有很多使用API v2.0的jQuery/Angular插件可以做到这一点。 – Gus
@aubreyhodes感谢您的回复,但现在我得到了404。我也添加了正确的API。没有成功。 – Gus
你需要在params中添加你的API密钥,像这样;
{
"apikey": "your key here",
"email_address": "[email protected]",
"status": "subscribed",
"merge_fields": {
"FNAME": "Urist",
"LNAME": "McVankab"
}
}
然后,您需要将datetype从“jsonp”更改为“json”。 “jsonp”只是GET,不能用于POST方法。
而你需要做的最后一件事是允许跨域脚本;
遗憾的是它不能够使用于前端Mailchimp API请求。
Note MailChimp does not support client-side implementation of our API using CORS requests due to the potential security risk of exposing account API keys.
不错,谨慎主持你修改后的php解决方案? – Himmators
我做到了,就是用你的AJAX代码,但去掉所有的MailChimp东西和后数据发送到PHP文件的方式。我用这个代码:
我只是去掉了一切,但我需要订阅单个用户的一部分,它的工作就像一个魅力。对于错误报告,您可能会检测到PHP端的错误并将HTTP状态发送到AJAX。
最好的是http://stackoverflow.com/a/21491824/1821607 –