Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mailchimp API V3 jQuery Ajax POST订阅者_Jquery_Ajax_Mailchimp_Mailchimp Api V3.0 - Fatal编程技术网

Mailchimp API V3 jQuery Ajax POST订阅者

Mailchimp API V3 jQuery Ajax POST订阅者,jquery,ajax,mailchimp,mailchimp-api-v3.0,Jquery,Ajax,Mailchimp,Mailchimp Api V3.0,Mailchimp API(v3.0)有一个大的更新,许多jQuery插件已经过时,以便在form.submit()上发布订阅者 阅读v3.0文档后: 建议使用以下JSON对象格式: { "email_address": "urist.mcvankab@freddiesjokes.com", "status": "subscribed", "merge_fields": { "FNAME": "Urist", "LNAME": "McVankab"

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

阅读v3.0文档后:

建议使用以下JSON对象格式:

{
   "email_address": "urist.mcvankab@freddiesjokes.com", 
   "status": "subscribed", 
   "merge_fields": {
      "FNAME": "Urist", 
      "LNAME": "McVankab"
   }
}
API的以下根端点列出了资源:

https://.api.mailchimp.com/3.0/

这是我的
form.submit()
code和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(数据)
对象:

{"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"}
有什么不对劲吗


这里是到(列表成员集合)的链接。

您将获得401,因为您没有传递API密钥

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

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization",
    "Basic " + btoa("api:" + mailchimp_api_key)); };

其中mailchimp_api_密钥是您帐户的密钥。查看有关使用api进行身份验证的更多信息。

您需要在参数中添加api密钥,如下所示

{
   "apikey": "your key here",
   "email_address": "urist.mcvankab@freddiesjokes.com", 
   "status": "subscribed", 
   "merge_fields": {
      "FNAME": "Urist", 
      "LNAME": "McVankab"
   }
}
然后需要将日期类型从“jsonp”更改为“json”。“jsonp”是GET only,不适用于POST方法

您最不需要做的就是允许跨域脚本编写


不幸的是,无法请求前端Mailchimp API

注意MailChimp不支持API的客户端实现 由于暴露的潜在安全风险,使用CORS请求 帐户API密钥


我这样做的方式是使用AJAX代码,但去掉所有MailChimp内容,并将post数据发送到PHP文件。我使用了以下代码:


除了订阅单个用户所需的部分之外,我只是去掉了所有的东西,它工作起来很有魅力。对于错误报告,您可能可以在PHP端检测错误并将HTTP状态发送到AJAX。

但是:如果这是从客户端JS发送的,那么这里也会有跨站点脚本问题。调用需要通过服务器代理,而不是依赖客户端。@TooMuchPete所以没有简单的方法通过客户端发送到mailchimp?有很多使用API v2.0的jQuery/Angular插件可以做到这一点。@aubreyhodes感谢您的回复,但现在我得到了404。我还添加了正确的API。没有成功。我所看到的客户端JavaScript库通常是通过服务器进行代理请求,或者发送到表单提交端点,而不是使用经过身份验证的API。除了技术限制之外,您不想向客户端发送API密钥,因为这会让站点的每个访问者都可以完全访问您的帐户。^^^这是一个很好的选择。不要在浏览器上使用API密钥。你的API密钥应该保密。最好的一个很好,你愿意主持你修改过的php解决方案吗?