Jquery 在不重新加载页面的情况下修改URL
我知道也有类似的话题,但我仍然没有找到有效的解决方案。我想将Jquery 在不重新加载页面的情况下修改URL,jquery,Jquery,我知道也有类似的话题,但我仍然没有找到有效的解决方案。我想将$.post方法发送到服务器,在此之前我想修改URL(允许用户彼此共享URL),但不需要重新加载页面。怎么做 Edit:换句话说,我想使用$.post方法过滤页面上显示的数据。但我还想修改用户可以复制的URL。这是不可能的。url中唯一不需要重新加载就可以修改的部分是#(hash a.k.a.片段)后面的部分。之前的其余部分将启动新(或旧)url的加载 您可以使用以下javascript更改它(通过重新加载): location.hre
$.post
方法发送到服务器,在此之前我想修改URL(允许用户彼此共享URL),但不需要重新加载页面。怎么做
Edit:换句话说,我想使用
$.post
方法过滤页面上显示的数据。但我还想修改用户可以复制的URL。这是不可能的。url中唯一不需要重新加载就可以修改的部分是#(hash a.k.a.片段)后面的部分。之前的其余部分将启动新(或旧)url的加载
您可以使用以下javascript更改它(通过重新加载):
location.href = 'http://www.whatever.com';
如果您的用户使用的是现代浏览器(几乎所有不是IE的东西),那么您可以使用新的HTML5。具体来说
replaceState()
将在不重新加载的情况下更改页面的URL。您可以这样使用它:
$.post('/some/url/', {some: data}, function(d){
// Do whatever with the returned data...
// Change page URL
history.replaceState({}, '', '/some/url/');
});
或者,您可以在加载数据之前更改URL:
// Change page URL
history.replaceState({}, '', '/some/url/');
// load page data
$.post('/some/url/', {some: data}, function(d){
// Do whatever with the returned data...
});
有关
replaceState
的示例,请转到此处:,然后单击4个选项卡。观看URL更改,但历史记录中没有添加任何内容:-)也许这就是您想要的
<body>
...
<div id='urltocopy'></div>
...
</body>
function doPost() {
$('#urltocopy').html('<a href="http://newurltocopy">Please copy</a>');
$.ajax({
type: 'POST',
url: urlStr,
dataType: 'html',
success: function(data) {
},
data: {},
});
}
...
...
函数doPost(){
$('#urltocopy').html('');
$.ajax({
键入:“POST”,
url:urlStr,
数据类型:“html”,
成功:功能(数据){
},
数据:{},
});
}
在现代浏览器中,您可以使用HTML5。但这会修改历史记录,而不是当前url。@Armin:有一种方法只会更改当前url,而不会推到历史记录上。Rocket,不久前,我看到人们在讨论github是如何做到这一点的,也许他们就是这样做的(history.replaceState)?例如,如果您点击/docs或/src文件夹,您应该会看到URL更新,以反映所做的更改,而无需重新加载页面。正如您提到的,这只适用于/w现代浏览器。@mikey:这正是:-)他们使用pushState
更改URL,并使用AJAX加载新页面内容。您不能修改表单元素上的action
属性。您可以,但这是他想要的吗?也许我读错了,但听起来他好像想在实际发布之前更改POST
操作的URL。谢谢,我会试试的。那么,如果用户使用IE,URL不会改变?@Tony:不会history.replaceState
在IE中不起作用。您应该在replaceState
调用周围添加if(!!(window.history&&window.history.replaceState))
。