2016-05-24 3 views
0

次のエンドポイントは、ボディパーサーミドルウェアを使用してExpressで記述されています。エンドポイントは期待し配列がAJAX jQueryリクエストを介して送信されるときに平坦化されます

app.post("/api/poll/new",api.NewPoll); 
api.NewPoll = function(req,res){ 
    if(!req.body) return res.status(400).send("MISSING BODY"); 
    console.log(req.body,typeof(req.body)); 
    if(!req.body.name) return res.status(400).send("MISSING NAME"); 
    if(!req.body.options) return res.status(400).send("MISSING OPTIONS"); 
//rest of the endpoint goes here 
}; 

データは次のようになります。私は郵便配達してこのデータを送信するとき

{ 
    "name":"Poller", 
    "options":[ 
     { 
      "name":"Jojo's Bizarre Adventure", 
      "desc":"A great show" 
     }, 
     { 
      "name":"Bakemonogatari", 
      "desc":"A real good show" 
     }, 
} 

は、すべての作品。 req.body.optionsが存在し、配列です。私はjQueryのAJAX呼び出しにまったく同じことを行うときしかし、結果はsignficantly異なります

var payload = { 
       name:"Poller", 
       options:g.newPollInfo 
//g.newPollInfo contains the same array 
      } 
     $.ajax({ 
      method:"POST", 
      url:"/api/poll/new", 
      data:payload, 
      success:function(data){ 
       console.log(data); 
      }, 
      error:function(req, status, error){ 
       console.log(req,status,error); 
      } 
     }); 

私は不足しているオプションを報告し、400エラーが発生します。印刷されたreq.bodyは次のようになります。

{ name: 'Poller', 
    'options[0][name]': 'Jojo'\s Bizarre Adventure', 
    'options[0][desc]': 'A great show', 
    'options[1][name]': 'Bakemonogatari', 
    'options[1][desc]': 'A real good show' } 'object' 

これまでにこの問題が発生したことはありません。問題は速達ではなく、同じデータを使用している郵便配達員によるリクエストであり、それは機能します。私が考えることができる唯一の問題は、要求が安全な接続を介してサービスされているiframeから行われているという事実にありますが、それは理にかなっていません。

このエラーの原因は何もわかりません。

+0

私の最初の推測は、コンテンツヘッダの違いです...あなたはPostmanと$ .ajaxコールの両方でそれらを設定できます。 –

+0

それに従ってください。 http://stackoverflow.com/questions/12693947/jquery-ajax-how-to-send-json-instead-of-querystring –

+0

これは私の問題だと思われます。@JeremyJStarcher –

答えて

0

boththese質問によると、問題は解決され、AJAXリクエストのヘッダータイプを指定してストリング化します。

$.ajax({ 
      method:"POST", 
      url:"/api/poll/new", 
      data:JSON.stringify(payload), 
      contentType:"application/json", 
      success:function(data){ 
       console.log(data); 
      }, 
      error:function(req, status, error){ 
       console.log(req,status,error); 
      } 
     }); 
関連する問題