使用额外参数更新当前URL
Update current URL with extra parameters
我有一个产品页面,每页显示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
- LinkedIn共享链接图片未使用自定义url更新
- 更新URL时使用Javascript函数显示日期
- 如何在不重新加载URL的情况下查询Node.Js的后端并更新页面
- 使用额外参数更新当前URL
- 更新 url 而不重新加载,具体取决于使用 jquery/javascript 选择的复选框
- Angular/UI路由器-如何在不刷新所有内容的情况下更新URL
- 将URL路径与<a>attr('href')来动态更新.active类
- Angularjs-在不更新当前控制器和模板的情况下更改URL
- 更新f5上的URL或刷新按钮
- 主干.js更改模型的 url 参数,提取不会更新获取的数据
- 如何在页面上显示时间、日期IP和URL?更新日期:2015年2月25日
- 如何根据其他组件中的事件更新组件URL
- 当数据在另一个URL上更新时,AngularJS是否可以在一个URL上触发$watch
- ExtJS——更改代理URL然后加载存储不会更新网格
- 通过ajax和url更新页面,而无需重新加载页面(node.js)
- 在不重新加载页面的情况下更新 URL 哈希
- AngularJS-基于URL更新模型
- 问题:当url更新时,JWPlayer总是从0位置重播
- Colorbox和pinterest按钮URL更新
- 使用 URL 更新 Twitter 状态 - 绕过应用广告