2016-12-09 44 views
0

私はAjaxの投稿要求を送信するのに苦労していますが、どこが間違っているのか分からず、私はjsと提出するこのフォームを持っています。 DIV:ajax json投稿のフラスコへの投稿

<script type="text/javascript"> 
     $(document).ready(function() { 
     $('input[type=radio]').on('change', function() { 
      $(this).closest("form").submit(); 
      var poll_id = $(this).closest("div").attr("id"); 
      var data = {poll_id}; 
      console.log(JSON.stringify(data)); 
      $.ajax({ 
       url: '/poll', 
       type: 'POST', 
       data: JSON.stringify(data), 
       contentType: 'application/json', 
       dataType: 'json' 
       }, function(data) { 
        console.log(data); 
       }); 
      }); 
    }); 
    </script> 

、フラスコに私はrequest.get_json()でそれを要求するが、エラー400を取得し維持しようと、フォームとdb.commit()が正常に動作します:

@app.route('/poll', methods=['GET', 'POST']) 
def poll(): 
    polltodb = pollingresult(request.form['points']) 
    session['points_session'] = request.form['points'] 
    db.session.add(polltodb) 
    db.session.commit() 
    data = request.get_json() 
    print data 

しかしget_json()が失敗します。

答えて

1

$(this).closest("form").submit();は、フォームに送信するHTMLページを示します。その行の後にjavascriptが実行されていても、別のXHRリクエスト(たとえば2つのリクエスト)を実行する場合でも、データはこのアプローチを使用して同じリクエストになることはありません。あなたがしようとしていることを達成するために、私は別のアプローチをとるでしょう:

  1. あなたのフォームに隠し要素を追加してください。例えば<input type="hidden" name="poll_id" id="myHiddenField">

  2. JavaScriptの更新:あなたは通常どおり約get_json()

+0

それは2つのリクエストを作ることが可能ことはないが心配しないでくださいと、フォームを介してデータにアクセスし、その後

<script type="text/javascript"> (function(){ $('input[type=radio]').on('change', function() { $('#myHiddenField').val($(this).closest("div").attr("id")); $(this).closest("form").submit(); }); }); </script> 
  • を?私が最初に試したアプローチ – destinychoice

  • +1

    2つのリクエストを作成することは間違いありませんが、GETまたはPOSTリクエスト(フォームを送信するか、ブラウザに新しいページに行くように指示するなど)を行うと、未処理のXHRリクエスト(AJAXなど)帰る場所はありません。 – abigperson