我有一个基于ajax的应用程序,其中我只有一个登录页面和主页面。
我的大部分链接都是" ajaxed"我和他让他们这样做:
$(document).on('click', '.tree a', function () { //get the href of the link that has been clicked, ajaxify ANY links
var link = $(this).attr('href'); //get the href off the list
$.ajax({ //ajax request to post the partial View
url: link,
type: 'POST',
cache: false,
success: function (result) {
$('#target').html(result);
$.validator.unobtrusive.parse($("form#ValidateForm"));
}
});
return false; //intercept the link
});
我想实现" pushState"在我的应用程序和我迄今为止所做的第一步是添加此代码:
$(document).on('click', 'a', function () {
history.pushState({}, '', $(this).attr("href"));
});
现在,只要点击我的任何链接并成功加载ajax内容,它就会更新我的地址栏。 我对这个API有点新,所以我不知道我错过了什么,但到目前为止我的问题是:
当我按下"返回"按钮,没有任何反应。我读到了关于" popstate"并浏览SO以寻找解决方案,但我不能 似乎让他们工作。
当我点击历史记录中的链接时,我会得到" raw"从主html的布局视图的孩子html w / o。如果我想要它显示如何,我需要做什么 它是从我的主应用程序中点击的?
我的大多数孩子观点都是表格或列表。
答案 0 :(得分:7)
此代码可以帮助您:
function openURL(href){
var link = href; //$(this).attr('href');
$.ajax({
url: link,
type: 'POST',
cache: false,
success: function (result) {
$('#target').html(result);
$.validator.unobtrusive.parse($("form#ValidateForm"));
}
});
window.history.pushState({href: href}, '', href);
}
$(document).ready(function() {
$(document).on('click', 'a', function () {
openURL($(this).attr("href"));
return false; //intercept the link
});
window.addEventListener('popstate', function(e){
if(e.state)
openURL(e.state.href);
});
});