2011-03-04 6 views
9

Ho il seguente codice che sto utilizzando per inviare dati a un elenco Newsletter MailChimp (API v3). Ogni volta che rimuovo il type: POST dalla funzione che tenta di inviare i dati tramite GET e invia i dati correttamente (risposta ok nel dashboard API MailChimp). Quando provo questo nel browser (FF) ottengo un file .part con una risposta "vera".jQuery Ajax POST non funziona con 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"); 
    } 
    })  
}); 
}); 

Sto tirando i miei capelli su questo, qualsiasi intuizione è molto apprezzata.

Grazie in anticipo,

JN

+1

non ci sono problemi di politica di origine lo stesso qui? – Yahel

+2

Non dovresti usare il metodo nella tua domanda - stai esponendo la tua chiave API MailChimp a chiunque sappia come visualizzare la fonte di una pagina web. Dovresti usarlo solo con codice lato server. Con questa esposizione, chiunque potrebbe teoricamente iscrivere membri al proprio elenco, eliminarlo, ecc. – adamdehaven

risposta

8

Il problema principale è quello che jc ha commentato nel post originale: semplicemente non funzionerà a causa dei problemi di Same Origin Policy. Firebug non è così esplicito sul perché la chiamata GET fallisce, ma è per questo che non restituisce alcun dato. Se lo guardi con il POST, vedrai che Firefox non effettua nemmeno la chiamata. La console di js di Chrome, d'altra parte, spiega direttamente la stessa politica di origine.

Tutto sommato, questa è una cosa molto buona se per nessun altro motivo che ti impedisce di pubblicare pubblicamente la chiave API del tuo account, che è una cosa molto brutta da fare. Se il motivo per cui non si affonda immediatamente, leggi il gran numero di metodi disponibili nell'API e poi rendi conto che tutto ciò che ti serve per accedervi è la chiave API.

Il modo corretto per eseguire questa operazione è di inviare di nuovo i dati POST al server, quindi effettuare la richiesta da lì. Ci sono diversi esempi PHP completamente costruiti (uno con jquery, anche), here.

+0

Grazie per la spiegazione dettagliata. Mi sono reso conto dopo che questo era il vero motivo per cui avevo un problema con qualcosa simile in passato. Grazie ancora! – jeffreynolte

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

potrebbe essere? Il punto e virgola è importante. Hehe

+0

grazie per l'intuizione, ma sfortunatamente nessun bueno. :( – jeffreynolte

+0

Forse hai bisogno di usare i parametri GET invece dei parametri POST – Joseadrian

+0

come indicato nell'API MC dovrebbe essere POST http://apidocs.mailchimp.com/rtfm/ – jeffreynolte

12

Esiste un endpoint non documentato che utilizza JSONP per eseguire richieste ajax tra domini.

Basta cambiare "post"? a "post-json?" e aggiungere "& c =?" alla fine dell'URL standard per ottenere l'endpoint JSONP. Ciò non richiede che la chiave API sia esposta sul lato client o la creazione di una vista lato server.

ho scritto un plugin jQuery che utilizza questo metodo, se questo è utile a tutti

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