Javascript 当我使用ajax将json发布到web服务器(Nodejs)时,web服务器可以';无法从客户端接收数据
客户端代码:Javascript 当我使用ajax将json发布到web服务器(Nodejs)时,web服务器可以';无法从客户端接收数据,javascript,json,ajax,node.js,Javascript,Json,Ajax,Node.js,客户端代码: self.getjson = function () { var timeinfo = new Object(); timeinfo.time = self.time; timeinfo.address = self.address; timeinfo.info = self.info; return JSON.stringify(timeinfo); }; alert(self.getjson()); $.ajax({
self.getjson = function () {
var timeinfo = new Object();
timeinfo.time = self.time;
timeinfo.address = self.address;
timeinfo.info = self.info;
return JSON.stringify(timeinfo);
};
alert(self.getjson());
$.ajax({
type: "POST",
//beforeSend:function(){$(".info").fadeIn('slow').html("正在提交,请稍后");},
url:'/user/add/timetemp',
data: self.getjson(),
beforeSend: function (xhr) {
xhr.setRequestHeader("Content-Type", "application/json");
},
success: function(data){
}
})
服务器代码app.js:
router.route('/user/add/timetemp')
.post(function(req,res){
console.log(req.body); // your JSON
res.send(req.body); // echo the result back
}))
客户的回答是:
客户端中有数据
来自服务器的答案:
但服务器为空,来自:
请求正文
包含请求正文中提交的数据的键值对默认情况下,它是未定义的
,并且在您使用诸如和之类的正文解析中间件时填充。
(我的重点)它接着说:
下面的示例显示如何使用主体解析中间件来填充req.body
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer'); // v1.0.5
var upload = multer(); // for parsing multipart/form-data
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.post('/profile', upload.array(), function (req, res, next) {
console.log(req.body);
res.json(req.body);
});
旁注: 一,。
self
上的所有这些变量都是全局变量。全局变量是一件坏事™. :-) 通常,最好将代码放在作用域函数中,并在该作用域函数中使用局部变量
二,<代码>新对象几乎不需要。您的getjson
函数可以简单得多:
self.getjson = function () {
return JSON.stringify({
time: self.time,
address: self.address,
info: self.info
});
};
或者(调试时稍微方便一些):
三,。在ajax
上发送回调之前,不需要您的;只需使用内置的contentType
选项:
$.ajax({
type: "POST",
//beforeSend:function(){$(".info").fadeIn('slow').html("正在提交,请稍后");},
url: '/user/add/timetemp',
data: self.getjson(),
contentType: 'application/json',
success: function(data) {
}
});
根据你的建议,问题终于解决了。这个问题的原因是在ajax上使用beforeSend回调。只需使用内置的contentType。凯文:真的吗?有趣!很高兴能解决这个问题。但我不知道为什么不需要在ajax上使用beforeSend回调。所以我会努力学习。非常感谢。
$.ajax({
type: "POST",
//beforeSend:function(){$(".info").fadeIn('slow').html("正在提交,请稍后");},
url: '/user/add/timetemp',
data: self.getjson(),
contentType: 'application/json',
success: function(data) {
}
});