我目前正在设置window.location.pathname属性,将用户重定向到一个相对URL。新的URL有参数,所以JavaScript行看起来像这样:
window.location.pathname = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;
字符串
这在Firefox中是成功的,但是Chrome用“%3F”编码问号,请求随后失败。
我不确定我是否正确使用了window.location。我是否需要使用window.location的属性,例如pathname或href?我发现只要我设置一个属性,位置就会重新加载,所以例如search和pathname属性无法单独设置。可以直接设置window.location吗?我只需要设置一个带参数的相对URL。
4条答案
按热度按时间pgvzfuti1#
pathname
和location
的许多其他属性以及链接仅反映URL的 * 部分 *:字符串
正如您所看到的,URL的
?...
部分不是pathname
的一部分;将包含?
的值写入location.pathname
是没有意义的,因为URL的这一部分不能包含问号。Chrome正在纠正您的错误,将字符编码为表示文字问号的序列,这不会终止pathname
。这些属性非常适合将URL分解为它们的组成部分以供处理,但在这种情况下,您可能不想写入它们。相反,写入
location.href
。这表示整个URL,但写入相对URL也很好;这将相对于当前值计算出来,所以实际上根本不需要读取和分割pathname
:型
请注意URL编码。如果用户名可以包含字符串以外的其他字符,您可能需要使用此方法来阻止这些字符破坏参数。在将任意字符串放入URL之前,请始终对它们进行URL编码。
g2ieeal72#
尝试设置
location.href
属性而不是window.location.pathname
。acruukt93#
使用
window.location.href
被认为是设置URL最安全的方法。我认为这应该解决编码问题。字符串
如果这没有帮助,请显示一个示例URL。
xxe27gdn4#
"
在您的情况下,您可以设置
location.search
属性,而无需知道/重置/解码整个URL。字符串
或者如果你有很多参数,有很多不同类型的字符
型