AJAX POST 浏览器历史记录
AJAX POST Browser History
我遇到了一个非常烦人的问题,还没有解决。
我正在使用 "Single Page Application Paradigm" 开发 Web 系统,但没有使用 angular、backbone 等任何框架
我们加载一次页面,几乎所有其他页面都是通过 ajax 加载的。当我们用户单击浏览器的后退按钮时,问题就开始了。
由于没有页面重新加载,在用户登录系统后,没有 url 发生变化,当用户尝试使用浏览器的后退按钮时,他被重定向到登录页面,因为这是他 "visited".
所有内容都是通过ajax加载的 post(不是很自豪)现在我们必须支持back/foward按钮。我尝试使用 HTML5 历史记录 API 但没有成功。我能够注册 'popstate' 回调并再次尝试模拟 post。但是页面中有些字段我必须恢复。我不确定我是否能找到它,但我需要的是将页面恢复到发送请求之前的状态,如快照。
谁能帮帮我?
谢谢! (我很绝望:D)
您可以考虑使用片段标识符(URL 中 # 之后的内容)来跟踪您正在使用的内容 "page",这就是某些框架所做的。大多数浏览器都可以侦听对此的更改,并且浏览器历史记录可以很好地配合它,因此您可以在更改时检索该值并采取适当的措施。
这是一个简单的操作示例:
var state = null;
$(document).ready(function($) {
//this is my menu... I created a simple menu just for testing :)
$('nav li').on('click', function(){
var title = $(this).text().toLowerCase();
loadPage(title);
window.history.pushState(title, null, '#'+title);
});
window.addEventListener('popstate', function(event) {
state = event.state;
console.log("State: "+state);
if(state != null && state != "null"){
loadPage(state);
}
});
});
function loadPage(page) {
$("#content").load(page+".html");
}
干杯;)
我遇到了一个非常烦人的问题,还没有解决。
我正在使用 "Single Page Application Paradigm" 开发 Web 系统,但没有使用 angular、backbone 等任何框架
我们加载一次页面,几乎所有其他页面都是通过 ajax 加载的。当我们用户单击浏览器的后退按钮时,问题就开始了。 由于没有页面重新加载,在用户登录系统后,没有 url 发生变化,当用户尝试使用浏览器的后退按钮时,他被重定向到登录页面,因为这是他 "visited".
所有内容都是通过ajax加载的 post(不是很自豪)现在我们必须支持back/foward按钮。我尝试使用 HTML5 历史记录 API 但没有成功。我能够注册 'popstate' 回调并再次尝试模拟 post。但是页面中有些字段我必须恢复。我不确定我是否能找到它,但我需要的是将页面恢复到发送请求之前的状态,如快照。
谁能帮帮我?
谢谢! (我很绝望:D)
您可以考虑使用片段标识符(URL 中 # 之后的内容)来跟踪您正在使用的内容 "page",这就是某些框架所做的。大多数浏览器都可以侦听对此的更改,并且浏览器历史记录可以很好地配合它,因此您可以在更改时检索该值并采取适当的措施。
这是一个简单的操作示例:
var state = null;
$(document).ready(function($) {
//this is my menu... I created a simple menu just for testing :)
$('nav li').on('click', function(){
var title = $(this).text().toLowerCase();
loadPage(title);
window.history.pushState(title, null, '#'+title);
});
window.addEventListener('popstate', function(event) {
state = event.state;
console.log("State: "+state);
if(state != null && state != "null"){
loadPage(state);
}
});
});
function loadPage(page) {
$("#content").load(page+".html");
}
干杯;)