Я пишу функцию js, которая принимает фактическое location.pathname + location.seach
, чтобы пользователь мог вернуться к странице результатов поиска, если он нажал кнопку " back
.
пример url: http://127.0.0.1:8000/search_for_book/?titel=&autor=doniyor#
function select_book(bookid){
var backurl = String(window.location.pathname+window.location.search);
//alert(backurl); //<---- this is giving the correct full path
window.location = 'selected/?book_id=' + bookid + '&back=' + backurl;
}
но в последней строке функция ?titel=
только до ?titel=
и отсекает остальные. новый url становится следующим:
http://127.0.0.1:8000/search_for_book/selected/?book_id=10&back=/search_for_book/?titel=
почему это? Мне нужно полное location.pathname с полным адресом location.search.
есть идеи?
но в последней строке функция добавляется только до? titel = и отсекает остальные.
Нет, это не так. Предупреждение/ведение журнала строкового значения, которое вы присваиваете window.location, должно было показать вам это. (И btw., window.location.href
- это правильный способ обновления местоположения. location
сам по себе является объектом, а не свойством - только допуски ошибок браузеров позволяют вам сделать это таким образом. Поэтому используйте window.location.href= …
вместо.)
Это происходит неправильно, потому что &
в URL-адресе разделяет параметры друг от друга. Таким образом, значение вашего параметра back
заканчивается после того, как &
, а затем приходит новый параметр autor
- потому что вы пренебрегли URL-закодировать значение параметра правильно.
Используйте encodeURIComponent
для значения, прежде чем добавлять его в строку.