как получить данные из 'ImmutableMultiDict' в колбе
Я учусь использовать ajax и флягу, поэтому я отправляю запрос ajax, и я получаю данные как post
запрос в моем файле 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);
}
});
и мой файл python содержит:
@app.route('/post/data',methods=['GET','POST'])
def postdata():
#do some
data = str(request.args)
json_dumps = json.dumps(data)
return json_dumps
это дает мне следующие данные на странице
"ImmutableMultiDict([('{"name":"John Doe","age":"21"}', u'')])"
и это то, что мой request.query_string
выглядит {%22name%22:%22John%20Doe%22,%22age%22:%2221%22}
так как name
и age
. Пожалуйста, поправьте меня, если я ошибаюсь.Спасибо заранее.
3 ответов
вам на самом деле не нужно получать данные от ImmutableMultiDict
. Есть несколько ошибок в том, что у вас есть, которые мешают вам просто вытащить ответ как данные json. Во-первых, вам нужно немного настроить параметры вашего вызова ajax. Вы должны добавить в тип вызова как POST
. Более того,datatype
должно быть записано как dataType
. Ваш новый звонок должен быть:
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);
}
});
данные теперь фактически отправляются как запрос post с json
тип. На колбе сервер, Теперь мы можем читать данные как информацию о сыне следующим образом:
@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
выводит John Doe
и 21
успешно.
Дайте мне знать, если это работает для вас или если у вас возникли дополнительные вопросы!
Edit: вы можете вернуть успех вызову ajax из колбы следующим образом:
# 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)
Я пришел на эту страницу, потому что я пытаюсь отправить форму с AJAX, и я, наконец, нашел решение. И решение состоит в том, чтобы пропустить JSON (надеюсь, это поможет другим в том же поиске):
$.ajax({
type: "POST",
url: my_url,
data: $("#formID").serialize(), //form containing name and age
success: function(result){
console.log(result);
}
});
затем на сервере колбы:
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'
просто вызовите to_dict по запросу.форма объекта, например, http://www.seanbehan.com/how-to-get-a-dict-from-flask-request-form/