cómo obtener datos de ‘ImmutableMultiDict’ en el matraz

Estoy aprendiendo a usar ajax y Flask, así que lo que hago es enviar una solicitud ajax y recibo los datos como solicitud post en mi archivo python.

My html file contains this code

 var data = {"name":"John Doe","age":"21"}; $.ajax({ url:'/post/data', datatype : "json", contentType: "application/json; charset=utf-8", data : JSON.stringify(data), success : function(result) { jQuery("#clash").html(result); },error : function(result){ console.log(result); } }); 

Y mi archivo de python contiene:

 @app.route('/post/data',methods=['GET','POST']) def postdata(): #do some data = str(request.args) json_dumps = json.dumps(data) return json_dumps 

Esto me da los siguientes datos en la página.

 "ImmutableMultiDict([('{\"name\":\"John Doe\",\"age\":\"21\"}', u'')])" 

Y esto es lo que parece mi request.query_string {%22name%22:%22John%20Doe%22,%22age%22:%2221%22}

Entonces, ¿cómo consigo el name y la age . Por favor, corrígeme si me equivoco en cualquier lugar. Gracias de antemano.

En realidad, no es necesario obtener datos de un ImmutableMultiDict . Hay un par de errores en lo que tiene que le impiden simplemente extraer la respuesta como datos json. En primer lugar, debe modificar ligeramente los parámetros de su llamada ajax. Debe agregar en el tipo de llamada como un POST . Además, el datatype debe deletrearse como datatype . Su nueva llamada debe ser:

 var data = {"name":"John Doe","age":"21"}; $.ajax({ type: 'POST', contentType: 'application/json', url: '/post/data', dataType : 'json', data : JSON.stringify(data), success : function(result) { jQuery("#clash").html(result); },error : function(result){ console.log(result); } }); 

Los datos ahora se están enviando como una solicitud de publicación con el tipo json . En el servidor de Flask, ahora podemos leer los datos como información del hijo de la siguiente manera:

 @app.route('/post/data',methods=['GET','POST']) def postdata(): jsonData = request.get_json() print jsonData['name'] print jsonData['age'] return "hello world" #or whatever you want to return 

Esto imprimirá John Doe y 21 éxito.

¡Avísame si esto te funciona o si tienes alguna pregunta adicional!

Edición: puede devolver el éxito a la llamada ajax desde el matraz de la siguiente manera:

 # include this import at the tomb from flask import jsonify @app.route('/post/data',methods=['GET','POST']) def postdata(): ... return jsonify(success=True, data=jsonData) 

Llegué a esta página porque estaba intentando enviar un formulario con AJAX y finalmente encontré una solución. Y la solución es omitir JSON (espero que esto ayude a otros en la misma búsqueda):

 $.ajax({ type: "POST", url: my_url, data: $("#formID").serialize(), //form containing name and age success: function(result){ console.log(result); } }); 

Luego, en el servidor Flask:

 app.route('/my_url', methods = [POST]) def some_function(): name = request.form['name'] age = request.form['age'] # do what you want with these variables return 'You got it right' 

Simplemente llame a to_dict en el objeto request.form Por ejemplo, http://www.seanbehan.com/how-to-get-a-dict-from-flask-request-form/