我正在编写js函数,该函数采用实际location.pathname + location.seach
,因此如果用户点击back
按钮,用户可以返回搜索结果页面。
示例网址: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=
,并切断其余部分。新的网址正在变成这样:
http://127.0.0.1:8000/search_for_book/selected/?book_id=10&back=/search_for_book/?titel=
这是为什么?我需要完整的location.pathname与完整的location.search。
任何想法?
答案 0 :(得分:1)
但是在最后一行中,函数仅追加到?titel =并且切断其余部分。
不,它没有。警告/记录您分配给window.location的字符串值会向您显示。 (顺便说一句,window.location.href
是更新位置的正确方法。location
本身是一个对象,而不是属性 - 只有浏览器的错误容忍允许你这样做。所以使用{{ 1}}代替。)
这是错误的,因为URL中的window.location.href = …
将参数彼此分开。因此,参数&
的值在back
之后结束,然后是 new 参数&
- 因为您忽略了对参数值进行URL编码
在将值添加到字符串之前,对值使用autor
。