jQuery Ajax POST 不适用于 MailChimp

Posted

技术标签:

【中文标题】jQuery Ajax POST 不适用于 MailChimp【英文标题】:jQuery Ajax POST not working with MailChimp 【发布时间】:2011-07-08 11:42:20 【问题描述】:

我使用以下代码将数据发送到 MailChimp 通讯列表 (API v3)。每次我从函数中删除 type: POST 时,它都会尝试通过 GET 发布数据并正确发送数据(MailChimp API 仪表板中的正常响应)。在浏览器 (FF) 中对此进行测试时,我得到一个带有“真实”响应的 .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

【问题讨论】:

这里没有同源策略问题吗? 您不应该在您的问题中使用该方法 - 您将 MailChimp API 密钥暴露给任何知道如何查看网页源代码的人。您应该只将它与服务器端代码一起使用。通过这种曝光,理论上任何人都可以将成员订阅到您的列表、删除它等等。 【参考方案1】:

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

只需更改“帖子?”到“后json?”并添加 '&c=?'到标准 url 的末尾以获取 JSONP 端点。这不需要在客户端公开 API 密钥,也不需要创建服务器端视图。

我写了一个使用这个方法的 jQuery 插件,如果它有用的话

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

【讨论】:

【参考方案2】:

主要问题是 jc 对您原始帖子的评论 - 由于同源政策问题,这根本行不通。 Firebug 对 GET 调用失败的原因没有直言不讳,但这就是它不返回数据的原因。如果您通过 POST 观看该内容,您会发现 Firefox 甚至没有进行调用。另一方面,Chrome 的 js 控制台直接向您解释了同源策略。

总而言之,如果没有其他原因阻止您公开发布您帐户的 API 密钥(这是一件非常糟糕的事情),这是一件非常好的事情。如果没有立即理解的原因,请仔细阅读 API 中可用的大量方法,然后意识到您需要访问它们的只是那个 API 密钥。

执行此操作的正确方法是将数据 POST 回您的服务器,然后从那里发出请求。有几个完全构建的 php 示例(甚至一个使用 jquery),here。

【讨论】:

感谢您的详细解释。事后我意识到,这正是我在过去遇到类似问题的原因。再次感谢!【参考方案3】:
e.preventDefault();
data = 
  "apikey" : "667378947", 
  "id" : "90298590285", 
  "email_address" : "test@getmoxied.net", 
  "output" : "json"
;

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

【讨论】:

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

以上是关于jQuery Ajax POST 不适用于 MailChimp的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?

Ajax POST 不适用于 spring security csrf,但 GET 方法有效

WCF Ajax 调用不适用于 Jquery $.ajax

用于下载文件的php代码不适用于ajax [重复]

ValidateAntiforgeryToken 不适用于 ASP.NET MVC 中的 Ajax

wordpress 中的 Ajax 调用不适用于前端站点的订阅者用户