2012-06-01 18 views
17

Sto provando a scrivere un'API Web basata su JSON in un'app Sinatra. Voglio POSTARE un oggetto JSON come corpo del post (con il giusto set di tipi di contenuto) ma sto lottando.Impostazione del corpo POST su un oggetto JSON con jQuery

in Cocoa, mi piacerebbe fare qualcosa di simile a

[mutableHTTPRequest setHTTPBody:dataRepresentationOfJSONObject]; 

E il tipo di contenuto, insieme a JSON, avrebbe poi postare il corpo HTTP come un oggetto JSON. Sto provando a farlo con jquery. Il meglio che posso fare finora prende solo l'oggetto JSON e lo trasforma in uno stile normale key=value&… in stile post, e quello è non quello che sto cercando.

mio Javascript:

var data = { "user" : "me!" }; 
$.ajax({ 
    type: "POST", 
    url: "/api/user/create", 
    contentType: 'application/json', 
    data: data, 
    success: function(r) { 

}); 

Eventuali indicazioni su come fare questo? Il mio obiettivo è per il mio Sinatra fare come la seguente

post "/api/user/create" do 
    js = JSON.parse(request.body.read) 
    # do something with the js object… this works when POSTing from Cocoa 
end 

risposta

48

Aggiungere il parametro processData alla vostra richiesta Ajax e impostarla su false. Inoltre, è necessario stringificare l'oggetto per trasformarlo in JSON.

var data = { "user" : "me!" }; 
$.ajax({ 
    type: "POST", 
    url: "/api/user/create", 
    processData: false, 
    contentType: 'application/json', 
    data: JSON.stringify(data), 
    success: function(r) { 

}); 

JSON.stringify non funziona nelle vecchie versioni di IE a meno di implementarlo. http://json.org

+2

Nota, processData è facoltativo. –

Problemi correlati