nodejs express, ajax posting w/ jquery and receiving response

前端 未结 3 1383
轻奢々
轻奢々 2020-12-23 10:34

Having some trouble getting express to respond properly to my jquery ajax request. The actual posting is working fine, but no matter what I try I cant seem to actually get a

相关标签:
3条回答
  • 2020-12-23 10:58

    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.

    0 讨论(0)
  • 2020-12-23 11:05

    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 objects
    function 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]);
                // ...
            }
        }
        // ...
    }
    
    0 讨论(0)
  • 2020-12-23 11:23

    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).

    0 讨论(0)
提交回复
热议问题