pathname
and many other properties of location
and links reflect only part of the URL:
http: //www.example.com/path/to/example.html?param1=2¶m3=4#fragment
^protocol^hostname ^pathname ^search ^hash
As you can see, the ?...
part of the URL is not part of the pathname
; it makes no sense to write a value containing ?
to location.pathname
, as that part of a URL cannot contain a question mark. Chrome is correcting your mistake by encoding the character to a sequence that means a literal question mark, which doesn’t terminate pathname
.
These properties are great for breaking a URL into their constituent parts for you to process, but you probably don’t want to write to them in this case. Instead, write to location.href
. This represents the whole URL, but it’s perfectly fine to write a relative URL to it; this will be worked out relative to the current value, so there is in fact no need to read and split the pathname
at all:
location.href="https://stackoverflow.com/questions/3643041/myPage.xhtml?u="+encodeURIComponent(selected_user.Username);
Note the URL-encoding. If a username can contain characters other than alphanumerics you will probably need this to stop those characters breaking the parameter. Always URL-encode arbitrary strings before putting them into part of a URL.