-2

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

GET变量改变结果的&perpage=10数量。我做了一个<select>下拉列表来选择不同数量的结果。

每当这个选择框被改变时,&perpage=NEWVALUE都应该被添加到当前的URL 中。

我怎样才能做到这一点?

4

6 回答 6

2

修改当前 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>
于 2012-08-27T16:54:48.337 回答
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);
于 2012-08-27T16:53:44.730 回答
0
window.location.href="?perpage=NEWVALUE"

这会将查询字符串附加到当前位置,并且窗口将导航到它

于 2012-08-27T16:53:47.083 回答
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值发布到您的 url,它会重新加载您的页面(action="someurl"如果您希望它转到另一个页面,请设置您的)。

于 2012-08-27T16:54:17.167 回答
0

在不重新加载页面的情况下,您无法修改您所描述的 URL。(假设您不想重新加载页面)

请参阅jquery:更改 URL 地址而不重定向?以获得更完整的解释,以及如何使用哈希做一些类似的事情。

于 2012-08-27T16:54:40.207 回答
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

于 2012-08-27T17:00:14.650 回答