Ответ 1
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.