我有一个产品页面,每页显示10个产品。
GET
变量&perpage=10
会更改结果的数量。
我已经<select>
下拉菜单选择不同数量的结果。
每当更改此选择框时,都应将&perpage=NEWVALUE
添加到当前网址。
我怎样才能做到这一点?
答案 0 :(得分:2)
修改当前网址的唯一方法是使用主题标签(#
)和window.history.replaceState
,两者都不会重新加载页面。这些方法执行调度您可以监听的更改事件,并使用ajax重新查询后端脚本以获取结果,但这可能比您实际需要的更多。 / p>
您最不希望做的是让您的表单(使用选择菜单)将表单重新提交回当前页面。类似的东西:
<form action="" method="GET">
<select name="perpage" onchange="this.form.submit()">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</select>
</form>
答案 1 :(得分:0)
好吧,只有location.href += "&perpage="+newvalue
(来自newvalue
值的适当定义的<select>
才有效,但过了一段时间你就会得到类似
http://example.com/products.php?perpage=10&perpage=20&perpage=50&perpage=10&perpage=5&perpage=20&................
所以你真的应该做更多的事情:
location.href = location.href.replace(/([?&])perpage=\d+/,"$1perpage="+newvalue);
答案 2 :(得分:0)
window.location.href="?perpage=NEWVALUE"
这会将查询字符串附加到当前位置,窗口将导航到它
答案 3 :(得分:0)
在PHP中,JavaScript?
<form method="get">
<select name="perpage">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>
</form>
使用GET
方法会将perpage
值发布到您的网址,然后重新加载您的网页(如果您希望将其转到其他网页,请设置action="someurl"
。)< / p>
答案 4 :(得分:0)
如果不重新加载页面,则无法修改您描述的URL。 (假设您不想重新加载页面)
请参阅jquery: change the URL address without redirecting?以获取更完整的解释,以及如何使用哈希进行类似的操作。
答案 5 :(得分:0)
假设您在服务器端询问如何执行此操作(您的问题未说明),这是实现您想要的一种方式:
$parts = parse_url($url); # parse the URL into its component parts
if (isset($parts['query'])) {
parse_str($parts['query'], $qs); # split query string into parts
} else {
$qs = array();
}
$qs['perpage'] = $NEWVALUE; # add param to array
$parts['query'] = http_build_query($qs); # build query string from array
# then, using `unparse_url()` from
# http://www.php.net/manual/en/function.parse-url.php#106731
# you rebuild the URL:
$url = unparse_url($parts);
# For reference, here's `unparse_url()`:
function unparse_url($parsed_url) {
$scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
$host = isset($parsed_url['host']) ? $parsed_url['host'] : '';
$port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
$user = isset($parsed_url['user']) ? $parsed_url['user'] : '';
$pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : '';
$pass = ($user || $pass) ? "$pass@" : '';
$path = isset($parsed_url['path']) ? $parsed_url['path'] : '';
$query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
$fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
return "$scheme$user$pass$host$port$path$query$fragment";
}
请参阅http://www.php.net/manual/en/function.parse-url.php#106731