使用 Api v3.0 和 jQuery Ajax 方法的 Mailchimp 连接错误 (401)

Posted

技术标签:

【中文标题】使用 Api v3.0 和 jQuery Ajax 方法的 Mailchimp 连接错误 (401)【英文标题】:Mailchimp connection error (401) with Api v3.0 and jQuery Ajax method 【发布时间】:2016-08-15 03:13:51 【问题描述】:

我正在尝试将 html 页面与我的 Mailchimp(免费)帐户相关联。 我已经阅读了文档,应该很简单。

这是我的 JS 代码(页面加载时加载的 jQuery 1.2.2):

username = [your-username];
apiKey = [your-mailchimp-api-key];
baseUrlMailchimp = "https://us5.api.mailchimp.com/3.0/";
apiMC = function(type, data, url, callback) 
            $.ajax(
                type: type,
                dataType: 'jsonp',
                data: data,
                contentType: 'application/json',
                url: url,
                beforeSend: function(xhr) 
                    xhr.setRequestHeader('Authorization', 'Basic ' + btoa(username + ":" + apiKey));
                ,
                success: function(e) 
                    if (callback) 
                        callback(e)
                    
                ,
                error: function(e) 
                    console.log(e);
                
            );
        
apiMC('GET', '', baseUrlMailchimp + 'lists', function(res)console.log(res))

问题是我收到错误 401(您的请求不包含 API 密钥)。

如果我从 Chrome REST 客户端启动相同的请求:

http://restclient.net/

在基本身份验证字段中指定 url 和 user/api,一切正常!

我不明白为什么,谁能帮帮我?

更新:来自 MAILCHIMP 的答复

你好弗朗西斯科,

我查看了提供的文章链接,看起来您确实遇到了相同的 Origin 策略块。同源策略阻止 ajax 调用其非源域。因此,您需要使用服务器端方法来触发 API 调用。

另外,目前 MailChimp 不支持 API 3.0 的 Jsonp。

如果还有什么我可以提供帮助的,请随时联系支持。

结束

【问题讨论】:

【参考方案1】:

我认为您可能遇到了同源策略。我认为您不能从 AJAX 调用另一个域。您可能需要通过网关文件来实现您的呼叫服务器端。

https://en.wikipedia.org/wiki/Same-origin_policy

【讨论】:

但是这个 API 是公开的......在这些情况下如何覆盖同源策略? 与拥有公共 API 的 MC 无关。在这种情况下,阻止您的不是 MailChimp。同源策略由客户端强制执行。你会想在那里阅读链接的文章。解决这个问题的方法是使这些请求在服务器端而不是通过 AJAX。这就是它在您的 REST 客户端而不是在您的站点上运行的原因。 好的,我正在阅读文档。可能您是对的,但是使用 jQuery ajax 方法无法绕过此策略似乎很奇怪。我已经搜索了很长时间,并且我看到以前发布过(对于 2.0 版 api)许多集成了这种实现的库。考虑到 ajax 方法提供的 JSONP 数据类型(理论上)应该可以解决跨域限制 是的,它认为 MC 仍在为 3.0 开发各种库。我不知道这些是否旨在解决客户端语言。但是,如果它能让你的生活更轻松一点,我一直在为 3.0 版开发一个全面的 php 库:[github.com/Jhut89/MailChimp-API-3.0-PHP-Wrapper] (github.com/Jhut89/MailChimp-API-3.0-PHP-Wrapper) 我在帖子中添加了 Mailchimp 的答案。你是对的,谢谢

以上是关于使用 Api v3.0 和 jQuery Ajax 方法的 Mailchimp 连接错误 (401)的主要内容,如果未能解决你的问题,请参考以下文章

Mailchimp API V3 jQuery Ajax POST 订阅者

使用 AJAX jQuery 访问 Python Rest API

使用 jQuery-Ajax REST API 调用的 iframe 显示不完整的页面

如何使用 ASP.NET MVC Rest API 调用和 jQuery Ajax 下载文件

使用 jQuery .ajax() PUT 请求 API 不起作用

如何使用 javascript/jquery/AJAX 调用 Django REST API?