Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当我使用ajax将json发布到web服务器(Nodejs)时,web服务器可以';无法从客户端接收数据_Javascript_Json_Ajax_Node.js - Fatal编程技术网

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

    }
});