jQuery Ajax与MailChimp一起使用的POST方法无法工作

9
我有以下代码,用于向MailChimp Newsletter列表(API v3)发送数据。每次我从函数中删除type: POST时,它会尝试通过GET发布数据,并正确地发送数据(MailChimp API仪表板中显示“ok”响应)。在浏览器(FF)中测试时,我会得到一个包含“true”响应的.part文件。
   $(function(){
     $("a#test").click(function(e){
       e.preventDefault()  
       data = {
         "apikey" : "667378947", 
         "id" : "90298590285", 
         "email_address" : "test@getmoxied.net", 
         "output" : "json"
       }

  $.ajax({ 
    type: "POST",
    url: 'http://us2.api.mailchimp.com/1.3/?method=listSubscribe',
    data: data,
    success: function(data){
      alert(data);
    },
    error: function(){
      alert("err");
    }
  })       
 });
});   

我在这件事上感到十分困扰,非常感谢您的帮助和见解。
提前致谢,
JN

1
这里难道没有同源策略的问题吗? - Yahel
2
你不应该在你的问题中使用这个方法 - 你会向任何知道如何查看网页源代码的人暴露你的MailChimp API密钥。你应该只在服务器端代码中使用它。通过这种方式,任何人都可以理论上订阅你的列表、删除它等。 - adamdehaven
3个回答

14

有一个未记录的端点可使用JSONP进行跨域ajax请求。

只需将“post?”更改为“post-json?”并在标准URL末尾添加“&c =?”即可获得JSONP端点。这不需要将API密钥暴露在客户端上,也不需要创建服务器端视图。

我编写了一个使用此方法的jQuery插件,如果有用的话。

https://github.com/scdoshi/jquery-ajaxchimp


9
主要问题是jc在你的原始帖子中所评论的 - 由于同源策略问题,这根本行不通。Firebug没有明确解释为什么GET调用失败,但这就是为什么它返回没有数据的原因。如果你观察POST的情况,你会发现Firefox甚至不会发出调用请求。另一方面,Chrome的js控制台直接向你解释了同源策略。
总的来说,这是非常好的事情,即使没有其他原因,它也可以防止你公开发布账户的API密钥,这是非常糟糕的事情。如果你不立刻理解原因,请浏览API中提供的大量方法,然后意识到你需要访问它们的唯一条件就是API密钥。
正确的方法是将数据POST回你的服务器,然后从那里发出请求。这里有几个完整的PHP示例(其中一个甚至使用jquery),请点击这里

非常感谢您的详细解释。我意识到事后,这正是我过去遇到类似问题的原因。再次感谢! - jeffreynolte

-2
e.preventDefault();
data = {
  "apikey" : "667378947", 
  "id" : "90298590285", 
  "email_address" : "test@getmoxied.net", 
  "output" : "json"
};

可能吗?分号很重要。呵呵


也许你需要使用GET参数而不是POST参数。 - Joseadrian
但是......你可以使用GET(在示例中说)http://apidocs.mailchimp.com/how-to/#ex1 我不知道 :( jaja - Joseadrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接