ajax接收到的json数据是空的

以下是前端请求代码:

 registerBtn.onclick = function () {
        var  xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (response) {
            if(xhr.readyState === 4 && xhr.status === 200){
                console.log(response);
            }
        }
        xhr.open('POST','http://localhost:8081/api/user/register');
        var userInfor = '{"username":"' + username + '","password":"' + password +'"}';
        xhr.send(userInfor);
    }

以下是用户注册时服务器端将注册提示信息保存到数据库中,

var express = require('express');
var router = express.Router();
var User = require('../models/User');
router.use(function (req, res, next) {
    responseData = {
        code: '',
        message: ''
    };
    next();
});
//用户注册
router.post('/user/register', function (req, res, next) {
    User.findOne({username: username}).then(function (userInfor) {
        if (userInfor) {
            responseData.code = 3;
            responseData.message = '用户名冲突,请重新输入';
            res.json(responseData);
            return;
        }
    })
});
module.exports = router;

为了篇幅小上面只提供关键代码,问题:

1. ajax进行POST请求时,能否直接在xnr.send中发送json数据?难不成只能发送序列化后的字符串?

2. 服务器端接受请求后已经为responseData这个json对象赋值了,为什么前端通过xhr.onreadystatechange收到的还是{"code":"","message":""}

阅读 3.5k
4 个回答

post的发送格式格式是aaa=1111&bbb=2222&ccc=3333这种的,要用函数进行处理
且post要设置头的

var data = {aaa:"1111",bbb:"2222",ccc:"3333"};
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
xhr.send(postDataFormat(data));

     function postDataFormat(obj){
        if(typeof obj != "object" ) {
            console.log("输入的参数必须是对象");
            return;
        }
            var arr = new Array();
            var i = 0;
            for(var attr in obj) {
                arr[i] = encodeURIComponent(attr) + "=" + encodeURIComponent(obj[attr]);
                i++;
            }
            return arr.join("&");
         }

数据传输格式有问题吧 看你的代码

1 可以,但是你要告诉服务端你提交的是什么数据,也就是Content-Type: 默认一般是“application/x-www-form-urlencoded” 所以你直接提交json服务器不认识

2 我看不明白你想要表达什么意思,res.json 就是把这个对象json化啊,你认为你应该得到什么结果

为啥不直接用jQuery提供的ajax函数,或者用fetch,send的没设置content-type。如果是json的话用JSON.stringify(userInfor)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题