我有一个产品页面,每页显示 10 个产品。
GET
变量改变结果的&perpage=10
数量。我做了一个<select>
下拉列表来选择不同数量的结果。
每当这个选择框被改变时,&perpage=NEWVALUE
都应该被添加到当前的URL 中。
我怎样才能做到这一点?
我有一个产品页面,每页显示 10 个产品。
GET
变量改变结果的&perpage=10
数量。我做了一个<select>
下拉列表来选择不同数量的结果。
每当这个选择框被改变时,&perpage=NEWVALUE
都应该被添加到当前的URL 中。
我怎样才能做到这一点?
修改当前 URL的唯一方法是使用主题标签 ( #
) 和window.history.replaceState
,这两者实际上都不会重新加载页面。这些方法确实调度了您可以侦听的更改事件,并且使用 ajax 重新查询后端脚本以获取结果,但是 - 这可能比您实际需要的要多一些。
您最有可能要做的是让您的表单(使用选择菜单)将表单重新提交回当前页面。就像是:
<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>
好吧,只是(从值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);
window.location.href="?perpage=NEWVALUE"
这会将查询字符串附加到当前位置,并且窗口将导航到它
在 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
值发布到您的 url,它会重新加载您的页面(action="someurl"
如果您希望它转到另一个页面,请设置您的)。
在不重新加载页面的情况下,您无法修改您所描述的 URL。(假设您不想重新加载页面)
请参阅jquery:更改 URL 地址而不重定向?以获得更完整的解释,以及如何使用哈希做一些类似的事情。
假设您正在询问如何在服务器端执行此操作(您的问题没有说明),这是执行您想要的一种方法:
$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";
}