我正在使用XHR请求拨打我的后端。这是我的前端代码:
var makeRequest = function(method, url, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
callback(xhr.responseText);
}
};
xhr.open(method, url);
xhr.send();
}
document.getElementById('button').addEventListener('click', function() {
makeRequest('GET', '/spotify', console.log);
});
这是我/spotify
路线的后端代码:
const Querystring = require('querystring');
module.exports = (req, res) => {
const queries = Querystring.stringify({
client_id: process.env.SPOTIFY_ID,
response_type: 'code',
redirect_uri: 'http://localhost:3000/redirect'
});
res.redirect(`https://accounts.spotify.com/authorize?${queries}`);
};
不是重定向,而是从XHR函数返回重定向到的页面的HTML。如果我在没有点击按钮的情况下前往路线(通过类似localhost:4000/spotify
之类的东西),它可以按照我想要的方式工作,并且我被重定向。
为什么会发生这种情况?
答案 0 :(得分:2)
这是正常和预期的行为。
重定向意味着“您要求的内容已在此处”。
重定向不表示“浏览器应将此网址加载为新网页”。
您是从XMLHttpRequest发出请求的。这意味着XMLHttpRequest将处理响应。服务器说它应该从其他URL获取内容,因此XMLHttpRequest获取该URL并在其responseText
对象中提供数据。
答案 1 :(得分:0)
这只是因为XHR处理每个正常请求的重定向。 如果您尝试将正常的XHR请求(在JS控制台中)发送到使用重定向响应的页面,则浏览器会将您重定向到该页面,无论这是XHR请求还是正常请求都无关紧要。