5

我想知道为什么很难在 a 中发布一个简单的 JSON 字符串/:parameter来恢复。我遵循了很多例子,但没有找到任何具体的例子。

我在前端有以下代码。

$("#btnDoTest").click(function() {

    var jData = {
        hello: "world"
    };
    var request = $.ajax({
        url: "http://localhost:8081/j/",
        async: false,
        type: "POST",
        data: JSON.stringify(jData),
        contentType: "application/javascript",
        dataType: "json"
    });


    request.success(function(result) {

        console.log(result);

    });

    request.fail(function(jqXHR, textStatus) {
        alert("Request failed: " + textStatus);
    });


});

如果我在j/. 但是我要发送的是这样的对象{hello:"world"},然后在 nodeJS 中将其重建并使用它。

- 编辑:

This is my nodejs file
/* the below function is from restifylib/response.js */
var restify = require("restify");

/* create the restify server */
var server = restify.createServer({

});


server.use(restify.bodyParser({ mapParams: true }));

server.use(
  function crossOrigin(req,res,next){
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    return next();
  }
);


 server.post('/j/', function (req, res, next) {


   //res.send(201,"REceived body: "+JSON.stringify(req.params));
   res.send(201,"REceived body: "+JSON.stringify(req.params));
   return next();
 });


var port = 8081;
server.listen(port);
console.log("Server listening on port " +port)

任何帮助将不胜感激。

0x

4

3 回答 3

6

我终于让它工作了。

--前端代码

$("#btnDoTest").click(function() {



        var request = $.ajax({

            url: "http://localhost:3000/j",
            async: false,
            type: "POST",
            data: {
                blob: {wob:"1",job:"2", ar:[1,2,{a:'b'}]}
            },

            contentType: "application/x-www-form-urlencoded", //This is what made the difference.
            dataType: "json",

        });


        request.success(function(result) {

            console.log(result);

        });

        request.fail(function(jqXHR, textStatus) {
            alert("Request failed: " + textStatus);
        });


    });

NodeJs 服务

/* the below function is from restifylib/response.js */
var restify = require("restify");

/* create the restify server */
var server = restify.createServer({

});


server.use(restify.bodyParser());
server.use(restify.CORS());


server.post('/j/', function(req, res, next) {

    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");

    // req.params  == data on jquery ajax request.


    res.send(200, JSON.stringify(req.params));
    console.log(req.params.blob.ar[2].a)



    res.end();
    return next();
});


var port = 3000;
server.listen(port);
console.log("Server listening on port " + port)
于 2013-06-05T13:31:30.257 回答
0

不要把它串起来。试试这个,注意两个更改,我删除JSON.stringify并切换到application/json,作为它的 JSON 而不是 JavaScript。

var request = $.ajax({
    url: "http://localhost:8081/j/",
    async: false,
    type: "POST",
    data: jData,
    contentType: "application/json",
    dataType: "json"
});

application/javascript只应在执行 JSONP 时使用。

于 2013-06-04T17:21:05.523 回答
0

我先回答!

jQuery:

$.ajax({
    url: url,
    method: 'post',
    data: JSON.stringify({key:value}),
    contentType: "application/json"
});

节点http:

server.post('/1', function(req, res) {
  var body = req.body;
  var dataValue = body.dataKey;
});

为什么?

$.ajax 的数据只是发送给服务器端的数据,它的数据类型还没有定义,所以在使用JSON.stringify({key:value})的时候,数据会以字符串形式发送,比如'{key:"xxx"}',节点接收到一个字符串, 不是 json 对象,即使字符串结构看起来像 json。但是在我们添加contentType: "application/json"$.ajax之后,当node接收到数据时,它将是一个真正的json对象类型的数据。

于 2016-08-07T16:36:39.610 回答