如何路由到post请求中的页面,post请求本身是通过XHR请求调用的

How to route to a page in a post request that is itself called through an XHR request?

本文关键字:请求 post 调用 XHR 路由 何路由      更新时间:2023-09-26

如果用户单击某个按钮,则会发出xhr请求以转到POST:

        var xhr = new XMLHttpRequest();   // new HttpRequest instance 
        xhr.open("POST", "/registration");
        xhr.addEventListener("load", e => {
            console.log(xhr.responseText)
        });
        xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
        xhr.send(JSON.stringify(this.state));

这是POST请求。

router.post('/registration', function *(req, res, next) {
console.info("trying to get the user");
//console.log(this.request.body);
let {name, password} = this.request.body
let taken = yield utils.nameTaken(name)
if(taken){
    //redirect to reg page
    console.log("taken!");
    //this.response.redirect("/registration");
    //res.redirect('/');
    console.log(req);
}
else{
    userSchema.createUser(name, password, function(err, user){
    //console.log(err, user);
    });
    //this.response.redirect("/success");
    //redirect to success page
}
})

我试图做的是,当take为true时,客户端被重定向到路由"/",当taked为false时,客户端则被重定向到"/success"。我在做这些重定向时遇到了问题,如果有任何帮助,我们将不胜感激。谢谢

你不能用这种方式来做,至少如果我理解正确的话。目前的情况是浏览器接收到响应(/success或/)作为其XMLHTTP请求的答案。然而,此时重定向已经发生。xhr.request.body将包含任何GET/success和GET/return。

您可能想做的只是简单地返回一个状态代码(我认为良好的REST实践是403表示失败,200表示成功),并在客户端对此做出反应。