我应该在XMLHttpRequest中使用什么回调函数来呈现响应?

时间:2017-03-22 03:25:06

标签: javascript ajax node.js express

用户在页面上执行某些操作后,我使用ajax将一些数据发送到我的Node.js Express服务器。然后该服务器执行此操作:

router.post('/', function(req, res){
//user authentication then, inside that callback
  res.redirect('/dashboard');
}

dashboard.js然后执行此操作:

router.get('/', function(req, res, next) {
    console.log("dashboard"); //<--This code is running
    res.render('index',{title:"You are logged in"});
}

现在前端正在这样做:

function httpGetAsync(theUrl, callback){
        let user = document.getElementById('username').value;
        let pass = document.getElementById('password').value;
        let data = {
            "username": user,
            "password": pass
        }
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                callback(xmlHttp.responseText);
        }
        xmlHttp.open("POST", theUrl, true); // true for asynchronous
        xmlHttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        var dataAsJson = JSON.stringify(data);
        xmlHttp.send(dataAsJson);
    }

index.html登录我的浏览器控制台,而不是看到我的好“你登录了”页面。这显然是因为我的onclick听众这样做了:

onclick='httpGetAsync("/createUser", console.log)'

而不是console.log(这显然是错误的),我该怎么称呼?

如何让dashboard.js中的res.render('index',{title:"You are logged in"})实际呈现?

这很像ExpressJS : res.redirect() not working as expected?,但该问题不包括包含其前端代码的部分,这是我认为问题所在。最后一条评论写道:“不,从来没有弄清楚。我最后以不同方式构建我的应用程序,登录部分采用模态,而不是另一页......非常令人沮丧”。

1 个答案:

答案 0 :(得分:1)

由于XHR用于发送和恢复响应,您正在接收html页面作为状态为301或302的响应,可能的解决方案是将重定向url作为响应发送

router.post('/', function(req, res){
  //user authentication then, inside that callback
  res.send('/dashboard');
}

并且在收到此回复后,您可以在回调中重定向到回复网址

function redirect(res){
  window.location = res;
}

onclick='httpGetAsync("/createUser", redirect)'