Javascript 什么';强制更改哈希值的最佳方法是什么?

Javascript 什么';强制更改哈希值的最佳方法是什么?,javascript,ajax,jquery,Javascript,Ajax,Jquery,我的网站使用hashchange触发的AJAX(使其更便于书签)。我遇到的问题是,当我在表单中单击“提交”时,通过$.post()发送的所有serialize()'d表单数据都会丢失。我之所以知道这一点,是因为我在单击submit后收到“Flag 1”警报,而其他各种测试(警报、回音等)都显示这是真的 以下是我当前的代码: $(document).ready(function() { var data = ''; var hash = ''; newPage(); alert('Flag 1'

我的网站使用hashchange触发的AJAX(使其更便于书签)。我遇到的问题是,当我在表单中单击“提交”时,通过
$.post()
发送的所有
serialize()
'd表单数据都会丢失。我之所以知道这一点,是因为我在单击submit后收到“Flag 1”警报,而其他各种测试(警报、回音等)都显示这是真的

以下是我当前的代码:

$(document).ready(function() {

var data = '';
var hash = '';
newPage();
alert('Flag 1');

$(window).bind('hashchange', function() {
    hash = window.location.hash;
    if (hash == '') {
        path = window.location.pathname;
        hash = '#' + path.replace(/^\/+/, '');
    }
    data += '&func=' + hash;
    var xhr = $.post(hash, data, function(result) {
        $("maincontent").html(result);
    })
    .done(newPage);
});
// Initialize vars and handle new form elements
function newPage() {
    data = '';
    $('form').submit(function() {
        data = $(this).serialize();
        // Flag 2 - What do I do here?
    });
}
// Load ajax content on first run of document
if ($('#maincontent').html() == '')
    $(window).trigger('hashchange');

});
我试图做的是手动触发hashchange事件,同时更改URL。问题是如果我只是设置
window.location.hash=$(this.attr('action')
然后
返回false
在“Flag 2”注释所在的位置,我最终在URL中得到了不需要的垃圾,可能是因为正在为URL编码哈希标记(…%23,等等)

我想知道设置散列的最佳方法是什么,以及是否有一种更简单的方法来完成我开始尝试做的事情


(我也愿意接受建议我尝试实现的导航风格的替代方法的评论)

好吧,我知道这样做有很多错误。但我们有其他选择,您肯定会喜欢:

  • jQuery历史插件:(演示:)
  • 历史JS:
  • 但是,如果您愿意避免旧的浏览器支持,我建议您使用HTML5
    history.pushState
    。(演示:)
  • 祝你好运