ajax接收到的json数据是空的

发布于 2022-09-06 08:39:21 字数 1366 浏览 17 评论 0

以下是前端请求代码:

 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":""}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

清眉祭 2022-09-13 08:39:21

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("&");
         }

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

罪歌 2022-09-13 08:39:21

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

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

从此见与不见 2022-09-13 08:39:21

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文