使用额外参数更新当前URL

时间:2012-08-27 16:49:34

标签: php javascript html

我有一个产品页面,每页显示10个产品。

GET变量&perpage=10会更改结果的数量。 我已经<select>下拉菜单选择不同数量的结果。

每当更改此选择框时,都应将&perpage=NEWVALUE添加到当前网址。

我怎样才能做到这一点?

6 个答案:

答案 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