ajax后退解决方案

2016-02-19 10:19 7 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不支持。
文中代码打包下载

相关:

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

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

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

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

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

来源:https://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函数。这个用的非常多,这里从略,可看后面的代码中...
随着计算机网络的普及,计算机病毒有了快速传播的机会,并且对数据文件的破坏日益严重,用户需要经常对个人重要数据做异地备份。基于多用户和数据隐私的考虑,提出了个人数据备份系统解决方案。它利用网络存储设备具有的大容量、高可靠性、高安全性特点,为用户提供一定容量的空间来保存个人数据,同时利用软件的权限管理很好地实现个人数...

经验教程

419

收藏

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