2015-09-25 101 views
7

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(列表成员集合)的链接。

+0

最好的是http://stackoverflow.com/a/21491824/1821607 –

回答

1

因为你没有传入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的更多信息。

+3

但也:如果这是来自clientside JS,这里也会有一个跨站脚本问题。呼叫需要通过服务器代理,而不是依靠客户端。 – TooMuchPete

+0

@TooMuchPete所以没有简单的方法通过客户端发送到mailchimp?有很多使用API​​ v2.0的jQuery/Angular插件可以做到这一点。 – Gus

+0

@aubreyhodes感谢您的回复,但现在我得到了404。我也添加了正确的API。没有成功。 – Gus

-1

你需要在params中添加你的API密钥,像这样;

{ 
    "apikey": "your key here", 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

然后,您需要将datetype从“jsonp”更改为“json”。 “jsonp”只是GET,不能用于POST方法。

而你需要做的最后一件事是允许跨域脚本;

http://enable-cors.org/server.html