Mailchimp API V3 jQuery Ajax POST订阅者

Gus*_*Gus 8 ajax jquery mailchimp mailchimp-api-v3.0

Mailchimp API(v3.0)有一个很大的更新,许多jQuery插件已经过时,以便POST订阅者form.submit().

阅读v3.0文档后:

管理订阅者建议使用以下JSON对象格式:

{
   "email_address": "urist.mcvankab@freddiesjokes.com", 
   "status": "subscribed", 
   "merge_fields": {
      "FNAME": "Urist", 
      "LNAME": "McVankab"
   }
}
Run Code Online (Sandbox Code Playgroud)

以下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);
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

这是JSON.stringify(data)对象:

{"email_address":"email@mail.com","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

GET http://... 401 (Unauthorized)
Err Object {readyState: 4, status: 404, statusText: "error"}
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

这是Mailchimp的API v3.0文档(列表成员集合)的链接.

aub*_*des -1

您收到 401 错误是因为您没有传递 API 密钥。

您需要将以下内容添加到 ajax 调用中:

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization",
    "Basic " + btoa("api:" + mailchimp_api_key)); };
Run Code Online (Sandbox Code Playgroud)

其中 mailchimp_api_key 是您帐户的密钥。有关 api 身份验证的更多信息,请查看http://kb.mailchimp.com/api/article/api-3-overview 。

  • ^^这个。**请勿在浏览器上使用您的 API 密钥**。您的 API 密钥应该保密。 (5认同)
  • 我见过的客户端 JavaScript 库通常要么通过服务器代理请求,要么发布到表单提交端点,而不是使用经过身份验证的 API。除了技术限制之外,您不希望向客户发送您的 API 密钥,因为这会让您网站的每个访问者都可以完全访问您的帐户。 (4认同)
  • 而且:如果这是来自客户端 JS,那么这里也会存在跨站点脚本问题。调用需要通过服务器代理,而不是依赖于客户端。 (3认同)