使用额外参数更新当前URL

Update current URL with extra parameters

本文关键字:URL 更新 参数      更新时间:2023-09-26

我有一个产品页面,每页显示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(根据<select>值适当定义newvalue)可以工作,但过一段时间你会得到类似的东西

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);

如果不重新加载页面,就无法像您描述的那样修改URL。(假设您不想重新加载页面)

请参阅jquery:在不重定向的情况下更改URL地址?以获得更完整的解释,以及如何使用哈希进行类似的操作。

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")。

假设你在服务器端询问如何做到这一点(你的问题没有说明),这里有一种方法可以做到你想要的:

$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