次のエンドポイントは、ボディパーサーミドルウェアを使用して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から行われているという事実にありますが、それは理にかなっていません。
このエラーの原因は何もわかりません。
私の最初の推測は、コンテンツヘッダの違いです...あなたはPostmanと$ .ajaxコールの両方でそれらを設定できます。 –
それに従ってください。 http://stackoverflow.com/questions/12693947/jquery-ajax-how-to-send-json-instead-of-querystring –
これは私の問題だと思われます。@JeremyJStarcher –