XMLHttpRequest不会重新加载页面

时间:2018-06-18 11:59:02

标签: javascript firebase xmlhttprequest firebase-authentication

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    console.log("Signed in");
    return user.getIdToken(true).then(function(idToken) {
        // Send token to your backend via HTTPS
        // ...
        console.log("Token = " + idToken);
        var bearer = "Bearer " + idToken;
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "dashboard");
        xhr.setRequestHeader("Authorization", bearer);
        return xhr.send();
    }).catch(function(error) {
        // Handle error
        console.log(error);
    });
  }
  else{
    console.log("User signed out");
  }
});

我正在做以下请求。在我的服务器中,我收到日志,说它已收到请求,并且已将其识别为经过身份验证的用户,依此类推。事实上,为了测试,我将它发送到一个简单的端点,如/hello,我只是在我的快递应用程序中res.render("Hello World!"),但即使这样,页面上也没有任何反应。为什么浏览器不刷新页面来表示来自端点的响应?

2 个答案:

答案 0 :(得分:0)

  

为什么浏览器不刷新页面来表示来自端点的响应?

因为Ajax的整个点是响应传递给JavaScript所以你可以用它做你喜欢的事情而不是加载一个新的页面。

您可以使用以下方式访问数据:

xhr.addEventListener("load", function () {
    console.log(this.responseText);
});

答案 1 :(得分:0)

您现在正在构建的内容本质上是一个与JS通信的Web应用程序。既然你现在正在做逻辑客户端而不是服务器端,而不是在登录后使用Express重定向到另一条路由,你必须做客户端路由。

这意味着在您从API收到成功的响应(200)后,您必须将客户端指向所需的路由。所以你会做类似的事情:

_

然而,您似乎意外地做了客户端逻辑。因此,我建议您停止使用XMLHttpRequest,并像在其他帖子中一样使用JOIN并继续努力尝试使其正常工作。通过这种方式,您可以继续构建服务器呈现的ExpressJS应用程序。