Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在不重新加载页面的情况下修改URL_Jquery - Fatal编程技术网

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