XMLHttpRequest не перезагружает страницу
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 ответа
Почему браузер не обновляет страницу, чтобы представить ответ от конечной точки?
Потому что весь смысл Ajax заключается в том, что ответ передается в JavaScript, поэтому вы можете делать с ним все, что вам нравится, вместо загрузки целой новой страницы.
Вы можете получить доступ к данным с помощью:
xhr.addEventListener("load", function () {
console.log(this.responseText);
});
То, что вы сейчас создаете, - это, по сути, веб-приложение, которое взаимодействует с API от JS. Поскольку теперь вы выполняете логику на стороне клиента, а не на стороне сервера, вместо того, чтобы использовать Express для перенаправления на другой маршрут после входа в систему, вы должны выполнить маршрутизацию на стороне клиента.
Это означает, что после того, как вы получили успешный ответ (200) от API, вы должны направить клиента к нужному маршруту. Так что вы бы сделали что-то вроде:
if (user) {
window.location = "/dashboard";
}
Однако кажется, что вы делаете логику на стороне клиента случайно. Поэтому я бы порекомендовал прекратить использовать XMLHttpRequest и просто использовать <form>
как вы делали в своем другом посте, и продолжайте свои усилия, чтобы попытаться заставить это работать. Таким образом, вы можете продолжить создание приложения ExpressJS для сервера.