Javascript 什么';强制更改哈希值的最佳方法是什么?
我的网站使用hashchange触发的AJAX(使其更便于书签)。我遇到的问题是,当我在表单中单击“提交”时,通过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'
$.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,等等)
我想知道设置散列的最佳方法是什么,以及是否有一种更简单的方法来完成我开始尝试做的事情
(我也愿意接受建议我尝试实现的导航风格的替代方法的评论)好吧,我知道这样做有很多错误。但我们有其他选择,您肯定会喜欢:
history.pushState
。(演示:)