全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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》 。

以上所述是小编给大家介绍的AJAX页面状态保持思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# ajax  # 页面状态  # jQuery基于ajax实现页面加载后检查用户登录状态的方法  # jQuery Ajax 实现在html页面实时显示用户登录状态  # 翻页  # 小编  # 都是  # 就会  # 也有  # 在此  # 中有  # 说到  # 可以通过  # 用了  # 给大家  # 这种情况  # 总会  # 不支持  # 不为  # 中也  # 历史记录  # 比以前  # 方法来  # 所有内容 


相关文章: 网站专业制作公司有哪些,做一个公司网站要多少钱?  ,想在网上投简历,哪几个网站比较好?  宝塔新建站点报错如何解决?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站主机选择指南:服务器配置与SEO优化实战技巧  javascript基本数据类型及类型检测常用方法小结  建站之星备案是否影响网站上线时间?  已有域名和空间如何搭建网站?  建站之星如何快速生成多端适配网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  建站主机核心功能解析:服务器选择与网站搭建流程指南  电脑免费海报制作网站推荐,招聘海报哪个网站多?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  定制建站方案优化指南:企业官网开发与建站费用解析  临沂网站制作公司有哪些,临沂第四中学官网?  如何选择靠谱的建站公司加盟品牌?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何快速登录WAP自助建站平台?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何在IIS中新建站点并配置端口与物理路径?  如何在宝塔面板中创建新站点?  盐城做公司网站,江苏电子版退休证办理流程?  装修招标网站设计制作流程,装修招标流程?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何配置IIS站点权限与局域网访问?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  七夕网站制作视频,七夕大促活动怎么报名?  Python lxml的etree和ElementTree有什么区别  深圳网站制作平台,深圳市做网站好的公司有哪些?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何高效配置IIS服务器搭建网站?  建站之星客服服务时间及联系方式如何?  详解jQuery中基本的动画方法  制作网站的基本流程,设计网站的软件是什么?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  免费视频制作网站,更新又快又好的免费电影网站?  c++怎么用jemalloc c++替换默认内存分配器【性能】  建站之星上传入口如何快速找到?  C++中引用和指针有什么区别?(代码说明)  如何安全更换建站之星模板并保留数据?  宝塔Windows建站如何避免显示默认IIS页面?  在线制作视频网站免费,都有哪些好的动漫网站?  IOS倒计时设置UIButton标题title的抖动问题  linux top下的 minerd 木马清除方法  如何在万网主机上快速搭建网站?  广德云建站网站建设方案与建站流程优化指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。