在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ ajax接收到的json數(shù)據(jù)是空的

ajax接收到的json數(shù)據(jù)是空的

以下是前端請求代碼:

 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);
    }

以下是用戶注冊時服務(wù)器端將注冊提示信息保存到數(shù)據(jù)庫中,

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;

為了篇幅小上面只提供關(guān)鍵代碼,問題:

1. ajax進(jìn)行POST請求時,能否直接在xnr.send中發(fā)送json數(shù)據(jù)?難不成只能發(fā)送序列化后的字符串?

2. 服務(wù)器端接受請求后已經(jīng)為responseData這個json對象賦值了,為什么前端通過xhr.onreadystatechange收到的還是{"code":"","message":""}?

回答
編輯回答
心上人

1 可以,但是你要告訴服務(wù)端你提交的是什么數(shù)據(jù),也就是Content-Type: 默認(rèn)一般是“application/x-www-form-urlencoded” 所以你直接提交json服務(wù)器不認(rèn)識

2 我看不明白你想要表達(dá)什么意思,res.json 就是把這個對象json化啊,你認(rèn)為你應(yīng)該得到什么結(jié)果

2017年6月26日 03:06
編輯回答
夢一場

post的發(fā)送格式格式是aaa=1111&bbb=2222&ccc=3333這種的,要用函數(shù)進(jìn)行處理
且post要設(shè)置頭的

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("輸入的參數(shù)必須是對象");
            return;
        }
            var arr = new Array();
            var i = 0;
            for(var attr in obj) {
                arr[i] = encodeURIComponent(attr) + "=" + encodeURIComponent(obj[attr]);
                i++;
            }
            return arr.join("&");
         }
2017年1月30日 22:06
編輯回答
乖乖瀦

為啥不直接用jQuery提供的ajax函數(shù),或者用fetch,send的沒設(shè)置content-type。如果是json的話用JSON.stringify(userInfor)

2017年4月4日 13:00
編輯回答
淺時光

數(shù)據(jù)傳輸格式有問題吧 看你的代碼

2018年1月10日 04:17