nodejs express, ajax posting w/ jquery and receiving response nodejs express, ajax posting w/ jquery and receiving response ajax ajax

nodejs express, ajax posting w/ jquery and receiving response


You are not sending a valid JSON response but a String containing the word json therefore the JSON.parse() is failing on the client side. Try this:

app.post('/save', function(req, res) {  console.log(req.body.objectData);  res.contentType('json');  res.send({ some: JSON.stringify({response:'json'}) });});

JavaScript Object Notation is a way to share data between applications in object format. However, you cannot send an object over an HTTP request without first turning it into a string and sending it as a single variable. The functions JSON.parse() and JSON.stringify() do this for us.


Pastor Bones' comment was particularly important to me, as I was using $.ajax to post to a Node server. My relevant portion of code ended up like this:

// Incoming parameter "teams" is an array of objectsfunction saveTeams(teams) {    var xhr;    var data = JSON.stringify({ teams: teams });    xhr = $.ajax({        type: "POST",        url: "http://localhost:8000/saveteam",        contentType: "application/json",        data: data,        headers: {            Authorization: "..."        }    });    return xhr;} 

Note that the contentType header is relevant for the parsing to work.

On the node server side, I can process the payload like this:

saveTeams: function (req, res, next) {    var teams = req.body.teams;    if (teams.length > 0) {        console.log("Teams to be added:");        for (var i = 0; i < teams.length; i++) {            console.log(teams[i]);            // ...        }    }    // ...}


Since you are using express,

res.contentType('json');

should be:

res.type('json');

but setting the type is not required since it is done automatically for you.

See the express api docs on res.type.

Also note that, for express, res.send({blah:"gee"}); automatically converts json objects using JSON.stringify internally. After clicking the above link, click on res.send and, while you are at it, res.json which saves a little processor overhead when you know you are sending JSON. Note that if you send JSON, the type is automatically set to JSON.

Always best to look at the source! Note that res.send calls this.json when it detects JSON, and that res.json calls this.send (yeah seems like a loop but it all works out).