2013-02-26 11 views
13

Ho una struttura di dati come questo:Come postare la struttura dei dati come json alla fiaschetta?

enter image description here

sto cerco di inviare al server $ .ajax:

$.ajax({ 
    type: 'POST', 
    data: post_obj, //this is my json data 
    dataType: 'json', 
    url: '', 
    success: function(e){ 
     console.log(e); 
    } 
}); 

e voglio farlo nel server pallone: title = request.form['title'] funziona bene!

Ma come ottengo content?

request.form.getlist('content') non funziona.

Questi sono i dati postali di Firebug:

enter image description here

grazie mille: D

+0

Come su 'content = Request.Form [ 'contenuti' ] '? :) – favoretti

+0

@favoretti non può funzionare: 'BadValueException: valore errato per il campo di tipo" contenuto ". Motivo: "Il valore non è un'istanza di (ottenuto: lista)" ' – Robin

+0

Ok, e cosa restituisce' request.form.getlist ('content') '? Un po 'più specifico su' non è lavoro 'potrebbe aiutare. Non avere un pallone a portata di mano qui per testare purtroppo. – favoretti

risposta

16

Si inviano i dati codificati come stringa di query anziché JSON. Flask è in grado di elaborare dati codificati JSON, quindi ha più senso inviarlo in quel modo. Ecco cosa dovete fare sul lato client:

$.ajax({ 
    type: 'POST', 
    // Provide correct Content-Type, so that Flask will know how to process it. 
    contentType: 'application/json', 
    // Encode your data as JSON. 
    data: JSON.stringify(post_obj), 
    // This is the type of data you're expecting back from the server. 
    dataType: 'json', 
    url: '/some/url', 
    success: function (e) { 
     console.log(e); 
    } 
}); 

sui dati lato server si accede tramite request.json (già decodificato):

content = request.json['content'] 
+0

Great! Grazie :) – Robin

2

Se si controlla il POST presentata da jQuery, è molto probabile vedere che content è effettivamente passato come content[]. Per accedervi dall'oggetto request di Flask, è necessario utilizzare request.form.getlist('content[]').

Se si preferisce che sia passato come content, è possibile aggiungere traditional: true alla chiamata $.ajax().

Ulteriori dettagli a riguardo sono disponibili nelle sezioni "dati" e "tradizionali" di http://api.jquery.com/jQuery.ajax/.

+0

ringrazia la tua risposta. – Robin

+0

quando ho impostato 'traditional: true' su $ .ajax. Ho ricevuto una stringa come '[oggetto oggetto]' nel server ... ma non è quello che voglio :( – Robin

+0

Diverse tecnologie lato server gestiscono diversamente, si consiglia di controllare la risposta su JSON fornita da Audrius – dirn

Problemi correlati