使用 Api v3.0 和 jQuery Ajax 方法的 Mailchimp 连接错误 (401)
Mailchimp connection error (401) with Api v3.0 and jQuery Ajax method
我正在尝试将 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 客户端启动相同的请求:
在基本身份验证字段中指定 url 和 user/api,一切正常!
我不明白为什么,谁能帮帮我?
更新:来自 MAILCHIMP 的回答
你好弗朗切斯科,
我查看了提供的文章 link,看起来您确实 运行 进入了同一个 Origin 策略块。同源策略阻止ajax调用其非源域。因此,您需要使用服务器端方法来触发 API 调用。
此外,目前 MailChimp 不支持 API 3.0 的 Jsonp。
如果还有什么我可以提供帮助的,请随时联系我们以提供支持。
结束
我认为您可能 运行 遵循同源策略。我认为您不能从 AJAX 调用另一个域。您可能需要通过网关文件实现调用服务器端。
我正在尝试将 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 客户端启动相同的请求:
在基本身份验证字段中指定 url 和 user/api,一切正常!
我不明白为什么,谁能帮帮我?
更新:来自 MAILCHIMP 的回答
你好弗朗切斯科,
我查看了提供的文章 link,看起来您确实 运行 进入了同一个 Origin 策略块。同源策略阻止ajax调用其非源域。因此,您需要使用服务器端方法来触发 API 调用。
此外,目前 MailChimp 不支持 API 3.0 的 Jsonp。
如果还有什么我可以提供帮助的,请随时联系我们以提供支持。
结束
我认为您可能 运行 遵循同源策略。我认为您不能从 AJAX 调用另一个域。您可能需要通过网关文件实现调用服务器端。