我想知道为什么要在/:parameter
中发布一个简单的JSON字符串来解析它是如此困难。我已经遵循了许多例子,但没有发现任何具体的事情。
我在前端有以下代码。
$("#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/
之后连接param,我在发送简单文本方面是成功的。但我要发送的是像{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
答案 0 :(得分: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)
答案 1 :(得分: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"
});
只有在做JSONP时才能使用 application/javascript
。
答案 2 :(得分: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。但是在我们在$ .ajax中添加contentType: "application/json"
之后,当节点收到数据时,它将是一个真正的json对象类型数据。