时间:2021-05-28
传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多信息为AJAX异步请求,比如:点击、翻页等。通常这种情况你一刷新浏览器,当前页面就会重置到初始状态。更不用说把看到的信息url发给好友了。
传统的状态保存在地址栏,如: /search#s=abc&id=23&page=4
这样还远远不够,如果用户点击“前进”“后退”,页面内容不会随之改变。之前参照网上别人的做法,用一个定时器来解决的。
/** * URL Watcher(require jQuery) * 监测url的变化 * useage: * UrlWatcher.init(50); * UrlWatcher.AddListener(function(url,isFirstLoad){ * FrontEngine.generateFront(); * }); * */var UrlWatcher = { "init": function (waittime) { this.UrlArray = [window.location.href];//set current url as default this.ListenerArray = []; this.ResetWaitTime(waittime); }, "AddListener": function (listener) {//add a process function this.ListenerArray.push(listener || function () {}); }, "DeleteListener": function () { this.ListenerArray = []; }, "ResetWaitTime": function (time) {//start timer if (this.IntervalHandle) {window.clearInterval(this.IntervalHandle); } this.WaitTime = time || 1000; this.IntervalHandle = window.setInterval(this.ListenerCall.setThis(this), this.WaitTime); }, "ListenerCall": function () { var self = this, url = window.location.href; if (self.UrlArray[self.UrlArray.length - 1] === url) {return; } window.clearInterval(this.IntervalHandle); $.each(this.ListenerArray, function (c, listener) { listener(url, self.UrlArray.length === 0); }); this.UrlArray.push(url); this.ResetWaitTime(this.WaitTime); }};Gmail 中也用了状态保持的东西,但是url是不会改变的。目前也有专门的Framework实现这种功能,比如 RSH 、 History Framework 。
之前我通过这种定时器的方法,解决了一些问题。但是,通过这种定时的方法不是实时触发的,总会有一个延时,因为是定时去不停的检测url中hash的变化。
说到hash,hash的变化在新的浏览器中是支持监测的。就是haschange 这个事件,在html5中有定义。目前,各浏览器对haschange的支持情况如下:
Gecko 1.9.2 (Firefox 3.6/Thunderbird 3.1/Fennec 1.0)
IE 8
WebKit 528+ (Safari/Google Chrome)
Opera 10.70
只要浏览器版本比以前大的,都是支持的。此外,ie8以ie7模式运行时,window下存在onhashchange这个方法,但是不会触发这个事件。可以通过 检测IE的document.documentMode 这种方法来检测。
if( ('onhashchange' in window) && ((typeof document.documentMode==='undefined') || document.documentMode==8)){ // 浏览器支持onhashchange事件 indow.onhashchange = hashChangeFire; // TODO,对应新的hash执行的操作函数} else { // 不支持则用定时器检测的办法 setInterval(function() { var ischanged = isHashChanged(); // TODO,检测hash值或其中某一段是否更改的函数 if(ischanged){ hashChangeFire(); // TODO,对应新的hash执行的操作函数 } },150);}还是存在ie6/7以及ie8兼容模式下的兼容性问题:不能使用浏览器的前进后退按钮保持追踪,因为这些浏览器并不为锚点的改变创建历史。
要解决这个问题,可以创建一个隐藏的iframe,通过改变iframe的hash控制ie的历史记录,如 《jQuery hashchange event》 。
以上所述是小编给大家介绍的AJAX页面状态保持思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
看到一个问题:定时更新GridView的某一列中的状态文本。马上就有了思路:GridView最后会生成表格,所以我们在页面中通过Ajax更新表格的列,从而达到a
1、Ajax无刷新页面的好处:提供良好的客户体验,通过Ajax在后台从数据库中取得数据并展示,取缔了等待加载页面而出现的空白状态;2、那么,Ajax无刷新页面是
Html页面复制代码代码如下:页面提交后提取Html源码(保持状态)functiongetAllCode_IE(){document.getElementByI
详解Python序列化Serialize和反序列化Deserialize序列化(serialization)序列化是将对象状态转换为可保持或传输的格式的过程。与
之前未接触过微信小程序项目,在使用jQuery库的ajax中很正常,服务器也能保持会话状态。在使用wx.request中发现会话一直不能保持,一开始以为是服务器