2011-03-04 32 views
9

我使用以下代码将数据发送到MailChimp时事通讯列表(API v3)。每次我从函数中删除type: POST,它都会尝试通过GET发布数据,并且它会正确发送数据(MailChimp API仪表板中的响应正常)。在浏览器(FF)中测试时,我得到一个带有“true”响应的.part文件。jQuery Ajax POST不能与MailChimp配合使用

$(function(){ 
    $("a#test").click(function(e){ 
     e.preventDefault() 
     data = { 
     "apikey" : "667378947", 
     "id" : "90298590285", 
     "email_address" : "[email protected]", 
     "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 2011-03-04 00:52:49

+2

您不应该在您的问题中使用该方法 - 您将MailChimp API密钥公开给任何知道如何查看网页源代码的人。您应该只将它与服务器端代码一起使用。有了这种风险,任何人理论上都可以订阅成员名单,删除它等。 – adamdehaven 2012-12-07 00:01:31

回答

8

主要问题是什么jc评论你原来的帖子 - 这根本不会工作,由于相同的原产地政策问题。 Firebug并没有声称为什么GET调用失败,但这就是为什么它不返回数据。如果您使用POST观看该视频,则会看到Firefox甚至没有拨打电话。另一方面,Chrome的js控制台直接向您解释了“同源”政策。

总而言之,如果没有其他原因,这是一件非常好的事情,它会阻止您公开发布您的帐户的API密钥,这是非常糟糕的事情。如果原因不能立即陷入,请仔细阅读API中提供的大量方法,然后意识到您需要访问它们的所有API都是该API Key。

正确的做法是将数据发送回服务器,然后从那里发出请求。有几个完整的PHP示例(一个使用jQuery,甚至),here

+0

谢谢你的详细解释。我意识到事后这是我有一个问题的原因与以往类似,再次感谢! – jeffreynolte 2011-03-04 19:32:09

-2
e.preventDefault(); 
data = { 
    "apikey" : "667378947", 
    "id" : "90298590285", 
    "email_address" : "[email protected]", 
    "output" : "json" 
}; 

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

+0

感谢您的洞察力,但不幸的是没有bueno。 :( – jeffreynolte 2011-03-04 00:48:54

+0

也许你需要使用GET参数而不是POST参数 – Joseadrian 2011-03-04 00:53:00

+0

正如在MC API中提到的那样它应该是POST http://apidocs.mailchimp.com/rtfm/ – jeffreynolte 2011-03-04 00:59:48

12

有一个未公开的端点使用JSONP来执行跨域的Ajax请求。

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

我写了一个使用此方法的jQuery插件,如果在所有

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

相关问题