Jquery ajaxからデータをPOSTするのに問題があります。
_$('#clickme').click( function() {
var data = save_input(); // data
data['_sid'] = $survey_id; // survey_id injected from flask
data['_uip'] = $user_ip; // user_ip injected from flask, request.remote_addr
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: JSON.stringify(data),
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
console.log(data);
});
_
コードから、data
は次のようなJavaScriptオブジェクトです
_{
'foo' : 'foo',
'bar' : 'bar',
'fo_' : 42,
}
_
flaskでやろうとしていることは:
_@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form)
_
参照してください、ajaxリクエストは行われますが、データは送信されません。 ajaxでconsole.log(data)
を実行しているので、jqueryのdata
変数に意味のあるデータがあることがわかります。ただし、ajaxビューのrequest.formは空です。データはどこに送信されますか?
試して
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: JSON.stringify(data, null, '\t'),
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
次に、サーバーから、次のようにデータ内の変数を参照できます。
request.json['foo']
コンテンツタイプはapplication/json
データはrequest.json
あなたの例では、キーと値のペアを送信するのではなく、jQueryデータオプションにJSON文字列を割り当てています。コメントで述べたように、JSONを文字列化する必要があり、キー(フラスコからJSON文字列にアクセスするために使用される)でオブジェクトを作成し、それをjQueryデータキーに割り当てます。
$.ajax({
type : "POST",
url : "{{ url_for('mod.load_ajax') }}",
data: {json_str: JSON.stringify(data)},
contentType: 'application/json;charset=UTF-8',
success: function(result) {
console.log(result);
}
});
@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
if request.method == "POST":
# load _sid and _uip from posted JSON and save other data
# but request.form is empty.
# >>> request.form
# ImmutableMultiDict([])
return str(request.form['json_str']
)
ContentTypeを削除しようとしましたか? Flaskにデータを投稿するとします。
のような偽のデータを追加してみてください
data:{"hello": "world"} ajax内ですか? hello worldがrequest.formに到着するかどうかを確認するためだけに
flask側で、次を使用します。
data = request.get_json()
変数データにはajaxを使用して送信した辞書が含まれるようになり、pythonで操作できるようになりました