javascript - 为什么nodejs接收的值总空的{}?
迷茫
迷茫 2017-04-11 11:52:09
[JavaScript讨论组]

前台用的是xhr向后台发请求,后台是nodejs接收前台数据,不懂为什么node接收的值总为空的{};
如果前台换成angularJS的$http来发请求,后台则可以成功接收数据

//HTML

<body ng-app="app" ng-controller="ctrl">
    <input type="text" class="name">
    <input type="button" value="submit" class="submit" ng-click="sendData()">
</body>

//XHR2

<script>
var btn = document.querySelector('.submit');   
function sendText() {

    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/xhr', true);
    xhr.withCredentials = true;
    var name = document.querySelector('.name');
    var data = {name: name.value};
    
    xhr.onload= function(){
        if(xhr.status == 200){
            console.log(xhr.response);
        }
    };
    xhr.onerror= function(){
        console.log('error occur')
    };
    xhr.send(data);
}

btn.onclick = function() {
    sendText();
}

</script>

//angular $http

<script>
angular.module('app',[])
        .controller('ctrl', function($scope, $http){
            var name = document.querySelector('.name');
            $scope.sendData = function(){
                $http({
                    method: 'POST',
                    url: '/xhr',
                    data: {name: name.value}
                }).then(res=>{
                    console.log(res);
                });
            };
        });
<script>

//app.js

var express = require('express');
var app = express();
var fs = require('fs');
var bodyParser = require('body-parser');

app.listen(3000, function(err) {
    if (err) console.log(err);
    console.log('server running on port 3000');
});

app.use(express.static('js'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());

app.get('/xhr', function(req, res) {
    res.sendFile(__dirname + '/xhr.html');
});

app.post('/xhr', function(req, res) {
    console.log(req.body);//空的{}
    res.end('hello');
});

XHR2 后台接收数据的截图

angularJS $http 后台接收数据的截图

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
天蓬老师

我测试过了,是你发送的数据有问题,按你所写的,发送出去的内容是这样:
抓包结果:
并不是你期望的json字符串,如果你实在想用json,得把js对象转换为json字符串.
建议使用name1=value1 格式, 不行的原因是你没有说明内容的类型,应该在open之后加上xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 就可以了.

高洛峰

原生的ajax接受的data格式应该是 name1=value1&name2=value2 才对吧,jq 才能直接传对象

怪我咯

var data = "name="+name.value;

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号