Javascript在将其放入历史记录之前更改url参数

时间:2012-02-15 08:40:19

标签: javascript browser-history http-request-parameters

我正在使用datatables JQuery插件。我使用它与AJAX和分页(服务器端)。每行包含指向该记录详细视图的链接。单击该链接然后在后退按钮上,我想返回上一页。 (注意:不能使用数据表自带状态保存)。

这可以实现如果您可以在将url参数放入历史记录之前将其添加到当前网址。

可以这样做吗?纯JS或JQuery并不重要。

(注意:我很新做这种事情,已经阅读了关于使用#的内容,但从未这样做过,所以如果你建议请提供适用于我的问题的例子)

编辑:

非常基本的JQuery插件bbq指南 (http://benalman.com/projects/jquery-bbq-plugin/)

假设网址的散列为#a = 2& b = test,您可以按以下方式获取值:

//true = optional converts 2 to an integer, false to boolean,...
var a = $.bbq.getState('a',true);

您可以通过以下方式更改/添加值:

var hash = "a=3&b=hello";
$.bbq.pushState(hash);

pushState fires hashchange事件以防它被绑定。绑定事件但在doucment.ready函数中跟随:

// called when # part of URL is modified
$(window).bind( 'hashchange', function( event ) {
    var hash = event.fragment; // full hash as string
    var a = event.getState('a', true ); // value for a
    // here do meaningful action like an AJAX request using the hash parameters    
});

1 个答案:

答案 0 :(得分:5)

是的,HTML5 History API允许您这样做。查看MDN上的Manipulating the Browser History文章。

这是一个将参数添加到当前URL并替换当前历史记录条目的示例:

 var newURL = location.href + (location.search ? "&" : "?") + "myParameter=myValue";
 history.replaceState({}, '', newURL);

历史记录API是一项HTML5功能,遗憾的是not supported on all browsers。但是,有一个名为history.js的polyfill声称可以为所有浏览器提供支持。

更新:

您可能希望查看现有的解决方案和jQuery插件,而不是滚动自己的AJAX历史记录实现。看看,例如在What is the best back button jQuery plugin?问题的答案。