修改URL而不重新加载页面

时间:2012-01-17 21:33:32

标签: jquery

我知道有类似的主题,但我仍然没有得到有效的解决方案。我想将$.post方法发送到服务器,在此之前我想修改URL(允许用户彼此共享URL)但不重新加载页面。怎么做?

修改:换句话说,我想使用$.post方法来过滤页面上显示的数据。但我也想修改用户可以复制它的URL。

3 个答案:

答案 0 :(得分:2)

如果您的用户使用的是现代浏览器(几乎所有非IE浏览器),您可以使用新的HTML5 history methods。具体而言,history.replaceState

replaceState()会更改页面的网址而不会重新加载。您可以像这样使用它:

$.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的示例,请转到此处:https://github.com/features/projects,然后点击4个标签。观看网址更改,但没有添加到历史记录中: - )

答案 1 :(得分:0)

这是不可能的。您可以在不重新加载的情况下修改的URL中唯一的部分是#(hash a.k.a.片段)之后的部分。之前的其余部分将启动新(或旧)URL的加载。

您可以使用以下javascript更改它(使用重新加载):

location.href = 'http://www.whatever.com';

答案 2 :(得分:0)

也许这就是你想要的?

<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: {},

        });
}