J'apprends à utiliser ajax et Flask. J'envoie donc une requête ajax et je reçois les données sous la forme d'une requête post
dans mon fichier 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);
}
});
Et mon fichier python contient:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
#do some
data = str(request.args)
json_dumps = json.dumps(data)
return json_dumps
Cela me donne les données suivantes sur la page
"ImmutableMultiDict([('{\"name\":\"John Doe\",\"age\":\"21\"}', u'')])"
Et voici à quoi ressemble mon request.query_string
{%22name%22:%22John%20Doe%22,%22age%22:%2221%22}
Alors, comment puis-je obtenir les name
et age
. S'il vous plaît, corrigez-moi si je me trompe n'importe où. Merci d'avance.
En réalité, vous n’avez pas besoin d’obtenir des données d’une variable ImmutableMultiDict
. Il existe quelques erreurs dans votre travail qui vous empêchent de simplement extraire la réponse sous forme de données JSON. Tout d'abord, vous devez légèrement modifier les paramètres de votre appel ajax. Vous devez ajouter le type d’appel en tant que POST
. De plus, datatype
devrait être orthographié dataType
. Votre nouvel appel devrait être:
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);
}
});
Les données sont maintenant effectivement envoyées sous forme de demande de publication avec le type json
. Sur le serveur Flask, nous pouvons maintenant lire les données sous forme d’informations sonores comme suit:
@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
Ceci imprimera John Doe
et 21
avec succès.
Faites-moi savoir si cela fonctionne pour vous ou si vous avez des questions supplémentaires!
Edit: Vous pouvez renvoyer l'appel à un appel ajax depuis flask comme suit:
# 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)
Je suis venu sur cette page parce que j'essaie d'envoyer un formulaire avec AJAX et j'ai finalement trouvé une solution. Et la solution consiste à ignorer JSON (j'espère que cela aidera les autres utilisateurs à effectuer la même recherche):
$.ajax({
type: "POST",
url: my_url,
data: $("#formID").serialize(), //form containing name and age
success: function(result){
console.log(result);
}
});
Ensuite, sur le serveur 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'
Appelez simplement to_dict sur l'objet request.form, par exemple, http://www.seanbehan.com/how-to-get-a-dict-from-flask-request-form/