我的网站使用hashchange触发的AJAX(使其更友好)。我遇到的问题是,当我点击表单中的“提交”时,serialize()
通过$.post()
发送的所有表单数据都会丢失。我知道这是因为我点击提交后收到“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');
然后return false;
“标记2”注释,那么我最终会在URL中收到不需要的垃圾,这可能是由于为网址编码了哈希标记( ......%23等。
我想知道设置哈希的最佳方法是什么,以及是否有更简单的方法来做我想要开始做的事情。
(我也欢迎提出建议我试图实现导航风格的替代方法的评论)
答案 0 :(得分:0)
嗯,我知道这样做有很多错误。但我们有其他选择,您肯定会喜欢:
history.pushState
。 (演示:https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history)