我当前正在设置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的属性,如路径名或href?我发现,一旦我设置了一个属性,location就会被重新加载,因此,例如,search和pathname属性不能单独设置。可以直接设置window.location吗?我只需要用一个参数设置一个相对URL。
发布于 2010-09-05 03:22:04
pathname和location的许多其他属性和链接只反映了URL的一部分:
http: //www.example.com/path/to/example.html?param1=2¶m3=4#fragment
^protocol^hostname ^pathname ^search ^hash正如您所看到的,URL的?...部分不是pathname的一部分;将包含?的值写入location.pathname是没有意义的,因为URL的该部分不能包含问号。Chrome正在纠正你的错误,将字符编码成一个表示文字问号的序列,这不会终止pathname。
这些属性非常适合将URL拆分成它们的组成部分供您处理,但在这种情况下,您可能不想写入这些属性。相反,请写入location.href。这代表了整个URL,但编写一个相对URL到它是非常好的;这将相对于当前值计算出来,所以实际上根本不需要读取和拆分pathname:
location.href= 'myPage.xhtml?u='+encodeURIComponent(selected_user.Username);注意URL编码。如果用户名可以包含字母数字以外的字符,您可能需要这样做才能阻止这些字符破坏参数。在将任意字符串放入URL的一部分之前,始终对其进行URL编码。
发布于 2010-09-05 00:18:15
请尝试设置location.href属性而不是window.location.pathname属性。
发布于 2010-09-05 00:19:15
使用window.location.href被认为是设置网址的最安全的方式。我认为这应该可以解决编码问题。
window.location.href = window.location.pathname.substring( 0, window.location.pathname.lastIndexOf( '/' ) + 1 ) + 'myPage.xhtml?u=' + selected_user.Username;如果还不能解决问题,请提供一个示例URL。
https://stackoverflow.com/questions/3643041
复制相似问题