2014-09-11 16 views
5

Mój klient jest uczynienie wywołanie ajaxNodeJS Jak pobrać dane z serwera, wysłanej z jquery ajax poprzez wywołanie POST

{{ 


     function callNode(){ 

     console.log("I am called"); 
     var data = {"emailId":"[email protected]"}; 



     $.ajax({ 
      type: 'POST', 
      data: JSON.stringify(data), 
      /* data: { 
       blob: {wob:"1",job:"2", ar:[1,2,{a:'b'}]} 
      },*/ 
      contentType: "application/javascript", 
      //contentType: "application/x-www-form-urlencoded", 
      dataType:'json', 
      url: 'http://localhost:3000/notification',      
      success: function(data) { 
       console.log('success'); 
       console.log(JSON.stringify(data));        
      }, 
      error: function(error) { 
       console.log("some error in fetching the notifications"); 
      } 

     }); 
    } 
}} 

jestem w stanie dostać się do prośby w moich app.js ale nie jest w stanie uzyskać dane że jestem przechodzącej próbowałem szukać, ale nic nie działa

{{ 

     app.post('/notification', function(req, res) { 
     JSON.stringify(req.params); 


     /* 
     var body; 
     req.on('data', function(chunk) { 
     console.log("Received body data:");  
     body += chunk; 
     }); 

     // the end event tells you that you have entire body 
     /*req.on('end', function() { 
     try { 
     var data = JSON.parse(body); 
     colnosole.log(data); 

    } catch (er) { 
     // uh oh! bad json! 
     res.statusCode = 400; 
     return res.end('error: ' + er.message); 
    } 

    } 
    */ 


}} 

rzeczą jest jej nie przychodzi wewnątrz żadnych wydarzeń żądania i odpowiedzi (jak widziałem wiele osób korzystających z tej pobrać dane.

Pomóż mi dowiedzieć się, co jest nie tak tutaj po raz pierwszy ajax na węźle

Odpowiedz

3

Ponieważ wysyłania danych jak JSON contentType musi być zmienione w stosunku do tego, więc wywołanie ajax powinno być:

$.ajax({ 
     type: 'POST', 
     data: JSON.stringify(data), 
     /* data: { 
      blob: {wob:"1",job:"2", ar:[1,2,{a:'b'}]} 
     },*/ 
     contentType: "application/json", 
     //contentType: "application/x-www-form-urlencoded", 
     dataType:'json', 
     url: 'http://localhost:3000/notification',      
     success: function(data) { 
      console.log('success'); 
      console.log(JSON.stringify(data));        
     }, 
     error: function(error) { 
      console.log("some error in fetching the notifications"); 
     } 

    }); 

Tutaj widać contentType zmieniona na application/json.

Na końcu serwera należy sprawdzić request.body, aby uzyskać dane, a nie request.params.

+1

Sprawdziło się dzięki V31. Tylko zmiany wymienione przez u są wymagane, aby go uruchomić :) –

1

req.params nie robi to, co myślisz robi.

app.get('/:route', function(req, res) { 
    console.log(req.params.route); 
}); 

Zwiedzając /test by zapełnić req.params.route z test.

Szukasz req.body, którego można używać tylko z oprogramowaniem pośredniczącym body-parser.

1

Musisz użyć middleware ciała parsera (https://www.npmjs.org/package/body-parser) i trzeba zadeklarować które badyParser używać

  • app.use (bodyParser.json()) lub
  • app.use (bodyParser. raw()) lub
  • app.use (bodyParser.text()) lub
  • app.use (bodyParser.urlencoded())

    wewnątrz głównego pliku js. Następnie obiekt req.body będzie zawierał dane json/text/raw/urlencoded.