如何在JavaScript中传递查询参数并重定向

9
现在重定向只是简单地说出来。
window.location = "/relative_path/";

我想做的是在重定向时添加一个查询参数,这样目标页面就可以查看它,并在执行某些操作后进一步重定向到该页面。
一个使用示例是登录系统。当用户的令牌过期时,会被重定向到登录页面。在重定向时,我希望将完整的URL(包括URL中的查询参数)传递给登录页面,这样在成功登录后,用户可以被精确地重定向回原来的位置。
我尝试将路径作为URL参数传递,但由于转义问题,这种方法不起作用:重定向URL使用相同的字符(?=等),这会使系统混淆,并且参数会被截断。
所以类似于这样的方式,但显然这种方法行不通:
window.location = "/login?redirect=/original_location?p1=vl1&p2=v2

非常感谢您的建议。我尝试了encodeURI(),但是没有起作用。

1
检查 encodeURIConponent()。 - Mihai Crăiță
1个回答

15
你可以使用 encodeURIComponent() 方法。

encodeURIComponent() 方法通过使用表示字符的 UTF-8 编码,将 URI 组件进行编码,以便在它作为 URI 的一部分进行传递。它会用一至四个转义序列来表示每个特定字符的UTF-8 编码(仅对由两个“代理”字符组成的字符使用四个转义序列)。

示例

window.location = "/login?redirect=" + encodeURIComponent("/original_location?p1=vl1&p2=v2")

1
可以的。我之前没有提到过我尝试使用过encodeURI,但是忽略了encodeURIComponent。当使用encodeURI时,浏览器会自动解码已编码的字符,这已经预示着失败了。 - Csaba Toth
基本上encodeURIComponent转义的字符比encodeURI多,所以它能够正常工作。 - Csaba Toth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接