最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

怎么在页面状态保持ajax

来源:动视网 责编:小采 时间:2020-11-27 19:57:05
文档

怎么在页面状态保持ajax

怎么在页面状态保持ajax:这次给大家带来怎么在页面状态保持ajax,在页面状态保持ajax的注意事项有哪些,下面就是实战案例,一起来看一下。传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多信息为AJAX异
推荐度:
导读怎么在页面状态保持ajax:这次给大家带来怎么在页面状态保持ajax,在页面状态保持ajax的注意事项有哪些,下面就是实战案例,一起来看一下。传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多信息为AJAX异


这次给大家带来怎么在页面状态保持ajax,在页面状态保持ajax的注意事项有哪些,下面就是实战案例,一起来看一下。

传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多信息为AJAX异步请求,比如:点击、翻页等。通常这种情况你一刷新浏览器,当前页面就会重置到初始状态。更不用说把看到的信息url发给好友了。

传统的状态保存在地址栏,如: www.abc.com/search?s=abc&id=23&page=3

如果通过这种方式的话,浏览器会刷新页面,如果使用锚点的话则不会刷新浏览器。具体是点击页面去请求数据的同时会改变地址栏“#”后面的值。我们翻页到第四页

如: abc.com/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》 。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

PHP+Ajax如何实现表格的实时编辑

怎么用Ajax实现动态加载数据的功能

文档

怎么在页面状态保持ajax

怎么在页面状态保持ajax:这次给大家带来怎么在页面状态保持ajax,在页面状态保持ajax的注意事项有哪些,下面就是实战案例,一起来看一下。传统的页面,浏览器通过url访问页面,页面的内容由后台服务生成页面所有内容再发回给浏览器渲染展示。到AJAX流行的时候,很多信息为AJAX异
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top