ajax后退解决方案

2016-02-19 10:19 12 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的ajax后退解决方案教程,一起来看看吧!超容易上手~

【 tulaoshi.com - Web开发 】

一、使用iframe,通过document.write产生历史
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8"/
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;"0/div
/body
/html
script src="history-0.1.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
info.innerHTML = i;
document.title = i;
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

点击按钮后更新页面DOM(模拟ajax提交),会发现浏览器后退按钮可用了。点击后退,可返回到前一个状态。
这种方式缺点是只支持IE和Firefox。
ajax后退解决方案(二)
二、使用iframe,通过修改iframe.src产生历史
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;"0/div
/body
/html
script src="history-0.2.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
info.innerHTML = i;
document.title = i;
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

较上一篇多了个blank.html,是一个空html架子,没有JS逻辑代码,如下
代码如下:

!DOCTYPE HTML
html
head
titleblank.html/title
/head
body
/body
/html

每次ajax操作会往iframe.src的问号后附加一个数字以记录历史。点击后退按钮,iframe的onload事件中获取iframe的url,根据问号后的数字去取记录。
所有浏览器均支持该方式。缺点是如果主页面中存在其它iframe,且修改了其src。历史管理会混乱。
三、使用iframe,通过修改iframe.src产生历史,回调写在iframe对应的html页面中
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;"0/div
/body
/html
script src="history-0.3.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

与方案2相同也是使用iframe.src来产生历史,也需要一个单独的html页面(iframe)。不同的是回调逻辑不是写在iframe.onload中,而直接写在html页面中(上一篇则是空的html架子)。blank.html如下
代码如下:

!DOCTYPE HTML
html
head
titleblank.html/title
/head
body
script
var url= location.href;
if(url.indexOf('?')-1) {
var idx = url.substr(url.indexOf('?')+1);
parent.History.get(idx);
}
/script
/body
/html

和方案2一样所有浏览器均支持。
四、通过修改location.hash产生历史,hashchange事件处理后退
代码如下:

!DOCTYPE html
html
head
meta charset="utf-8" /
title0/title
/head
body
input type="button" value="加1" onclick="add()" /
div id="info" style="border:red 1px solid;width:200px;padding:10px;"0/div
/body
/html
script src="history-0.4.js"/script
script
var info = document.getElementById('info');
var i = 1;
function add() {
var data = {
param : i,
func : func
};
History.push(data);
i++;
}
History.push({param:0, func: func});
function func(i) {
info.innerHTML = i;
document.title = i;
}
/script

每次ajax操作去改变location.hash的值,每次修改后地址栏均会有所体现。在window.onhashchange中监听该事件。通过hash的值取对应的历史。
较iframe的好处是可以复制地址栏的url直接进入该历史记录,缺点是IE6/7不支持。
文中代码打包下载

相关:

http://msdn.microsoft.com/en-us/library/cc288209(v=vs.85).aspx

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

https://developer.mozilla.org/en/DOM/window.onhashchange

http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-hashchange

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

来源:http://www.tulaoshi.com/n/20160219/1594192.html

延伸阅读
标签: Web开发
可在服务器端加载方法: 代码如下: private void OnLoading() { System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append(" function pageLoad(){var manager = Sys.WebForms.PageRequestManager.getInstance(); "); sb.Append(" manager.add_beginRequest(OnBeginRequest); manager.add_endRequest(OnEndRequest...
随着中小企业在我国的蓬勃发展,越来越多的网络服务器会逐步进入千千万万的中小企业,与此同时,很多大的企业、机构随着业务的扩充分支机构也不断增加,这些用户需要购置网络服务器来满足业务发展的需要。但是这些用户受企业状况、资金预算的限制往往无法购置价格昂贵的基于SCSI接口的网络服务器,他们通常会选择性能较差、无冗余支持的ID...
计算系统与信息网络不停顿的运行与连接即高可用性已成为各行业特别是要求实时行业业务运行的基本要求。 惠普凭借丰富的经验创制的HP NetServer为您提供当今市场上最完备的高可用性系列产品和最优质的服务,使您的关键业务应用程序能连续可靠地高效运转。惠普还与业界领先的软硬件供应商联袂,为优化您的业务环境提供最...
标签: Web开发
•多个ajax请求同时发送,相互无依赖。 •多个ajax请求相互依赖,必须有先后顺序。 •多个请求被同时发送,只需要最后一个请求。 第1种case 应用场景: 这个场景很多,一个页面打开是多个区域同时请求后台得到各自的数据,没依赖,没顺序。 处理方案: 直接用jquery的ajax函数。这个用的非常多,这里从略,可看后面的代码中...
当您将数据库备份恢复到另一台服务器时,可能会遇到孤立用户的问题。SQL Server 联机丛书中的孤立用户疑难解答主题中没有讲述解决此问题的具体步骤。 本文介绍了如何解决孤立用户问题。 状态 Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中存在的问题。 更多信息 虽然术语“登录”和“用户”经常交换...

经验教程

678

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部