2016-05-24 4 views
0

Ich habe den folgenden Endpunkt in Express geschrieben, wobei ich die Body-Parser-Middleware verwende.Array wird abgeflacht, wenn es über AJAX gesendet wird. JQuery-Anforderung

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 
}; 

Die Daten, die der Endpunkt sieht wie folgt erwartet:

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

Wenn ich diese Daten durch Postman senden, funktioniert alles. req.body.options existiert und ist ein Array. Allerdings, wenn ich genau dasselbe in einem jQuery AJAX-Aufruf zu tun, ist das Ergebnis signficantly anders:

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

ich ein 400-Fehler erhalten, Reporting fehlende Optionen. Das gedruckte req.body sieht so aus:

{ 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' 

Ich hatte dieses Problem nie zuvor. Das Problem ist nicht in Express, als eine Anfrage durch Postman mit den gleichen Daten und es funktioniert. Das einzige Problem, das mir einfällt, liegt in der Tatsache, dass die Anfrage von einem iFrame gemacht wird, der über eine sichere Verbindung bedient wird, aber das macht keinen Sinn.

Ich habe keine Ahnung, was diesen Fehler verursacht.

+0

Meine erste Vermutung ist ein Unterschied in Content-Header ... Sie können diese sowohl in Postman und in der $ .ajax Aufruf setzen. –

+0

Bitte folgen Sie ihm; http://stackoverflow.com/questions/12693947/jquery-ajax-how-to-send-json-instead-of-querystring –

+0

Das scheint mein Problem zu sein @ JeremyJStarcher –

Antwort

0

Nach boththese Fragen, das Problem ist gelöst, geben Sie den Header-Typ auf der AJAX-Anfrage und stringify.

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