2013-02-16 6 views
51

jquery ajaxからのデータの取得に問題があります。コードからフラスコ内のajaxから投稿されたデータはどのように使用できますか?

$('#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は私がフラスコ内で何をしようとしている

{ 
    'foo' : 'foo', 
    'bar' : 'bar', 
    'fo_' : 42, 
} 

のようなjavascriptオブジェクトでは、次のとおりです。

@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要求がなされているが、データは提出されません。私はconsole.log(data)とajaxを実行するので、実際にはjqueryの変数dataに意味のあるデータがあることがわかります。 ajaxビューのrequest.formは空です。データはどこに提出されますか?

+0

に変更されます。「JSON.stringify(data)」を 'data'に変更して何が起こるかを確認してください。 – Blender

+0

@Blender私はデータを受け取ります。これをJSON形式でどのように受け取ることができますか? – thkang

+0

'request.json'を試しましたか? – Blender

答えて

52

のRequest.Formする到着した場合だけでは、このようにデータ内の変数を参照することができ、チェックしますタイプがapplication/jsonと指定されている場合、データはrequest.json

+3

これは正しい方法です - JSON.stringify。 – thkang

+3

'stringify'と' contentType'は仕事をしました、ありがとう – Acute

+0

thisiは有益です – Sinux

10

例として、キー値のペアを送信するのではなく、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'] 
    ) 
1

contentTypeを削除しましたか? Flaskにデータを投稿するとします。 { "こんにちは": "世界"} AJAX内部

あなたは

データのような偽のデータを追加してみてくださいだろうか?

request.json['foo'] 

をコンテンツので:ハロー世界はサーバから次に

$.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); 
    } 
}); 

を試してみてください

関連する問題