2015-09-25 454 views
7

Mailchimp API(v3.0)已經有了一個重大更新,許多jQuery插件已過期,以便POST訂戶form.submit()Mailchimp API V3 jQuery Ajax POST訂閱者

Managing subscribers提出了以下JSON對象格式:

{ 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

而下面的根端點的API列表資源:

https://<dc>.api.mailchimp.com/3.0/

閱讀V3.0文檔後所以這裏是我的form.submit()代碼與jQuery Ajax POST請求:

$(document).ready(function(){ 
    var mcForm = $('#mailchimpForm'); 
    var mailchimp = {}; 
    mailchimp.dc='us5'; 
    mailchimp.id='xxxxxxxx'; 
    var url = '//' + mailchimp.dc + '.api.mailchimp.com/3.0/lists/' + mailchimp.id + '/members/'; 

    function beginMailchimpPost(data){ 
     var params = JSON.stringify(data); 
     $.ajax({ 
      url: url, 
      method: 'POST', 
      data: params, 
      dataType: 'jsonp', 
      contentType: 'application/json; charset=utf-8', 
      error: function(res, text){ 
       console.log('Err', res); 
      }, 
      success: function(res){ 
       console.log('Success', res); 
      } 
     }); 
    } 
}); 

這是JSON.stringify(data)對象:

{"email_address":"[email protected]","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}} 

而且我發現了以下錯誤:

GET http://... 401 (Unauthorized) 
Err Object {readyState: 4, status: 404, statusText: "error"} 

出了什麼問題?

以下是Mailchimp's API v3.0 docs(列表成員集合)的鏈接。

+0

最好的是http://stackoverflow.com/a/21491824/1821607 –

回答

1

因爲你沒有傳入API密鑰,所以你得到了401。

你需要你Ajax調用添加以下內容:

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", 
    "Basic " + btoa("api:" + mailchimp_api_key)); }; 

哪裏mailchimp_api_key是您的帳戶的關鍵。請參閱http://kb.mailchimp.com/api/article/api-3-overview以獲取有關auth與api的更多信息。

+3

但也:如果這是來自clientside JS,這裏也會有一個跨站腳本問題。呼叫需要通過服務器代理,而不是依靠客戶端。 – TooMuchPete

+0

@TooMuchPete所以沒有簡單的方法通過客戶端發送到mailchimp?有很多使用API​​ v2.0的jQuery/Angular插件可以做到這一點。 – Gus

+0

@aubreyhodes感謝您的回覆,但現在我得到了404。我也添加了正確的API。沒有成功。 – Gus

-1

你需要在params中添加你的API密鑰,像這樣;

{ 
    "apikey": "your key here", 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

然後,您需要將datetype從「jsonp」更改爲「json」。 「jsonp」只是GET,不能用於POST方法。

而你需要做的最後一件事是允許跨域腳本;

http://enable-cors.org/server.html