window.location.href跳转异常:返回链接拼接在域名后而非替换
问题原因与解决方案
核心原因
你遇到的问题是API返回的URL字符串包含多余的双引号(或前后空白/换行符),导致window.location.href将其识别为相对路径,而非绝对URL。
举个例子:如果API实际返回的是"https://returnedurl.com/"(带外层双引号),而非纯https://returnedurl.com/,那么赋值给window.location.href时,浏览器会把带引号的字符串当作相对路径,拼接到当前域名后,就出现了https://mywebsitedomain.com/"https://returnedurl.com/"这种错误路径。
而你手动赋值时,是直接输入了不带引号的纯URL,所以能正常跳转。
解决方案
1. 先确认API返回的实际内容
打开浏览器开发者工具的「Network」面板,找到这个POST请求,查看「Response」标签页,确认返回的文本是否带有双引号、空格或换行符。
2. 针对性修复代码
根据API返回的格式,选择以下两种方式之一:
方式一:如果API返回的是JSON格式的字符串(比如"https://xxx.com")
将response.text()改为response.json(),JSON解析会自动去掉外层的引号:
try { const response = await fetch(url, requestOptions); const data = await response.json(); // 改用json()解析 window.location.href = data; } catch (error) { console.error("Error:", error); }
方式二:如果API确实返回带引号的纯文本
手动清理字符串,去除前后的引号和空白字符:
try { const response = await fetch(url, requestOptions); let data = await response.text(); // 去掉前后空白 + 去除首尾的双引号 data = data.trim().replace(/^"|"$/g, ''); window.location.href = data; } catch (error) { console.error("Error:", error); }
3. 验证修复效果
可以在赋值前添加一行打印,确认清理后的URL是否正确:
console.log('清理后的URL:', data);
内容的提问来源于stack exchange,提问作者Rox AS
相关产品推荐
相关产品推荐

