• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    AJAX页面状态保持思路详解

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

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

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

    如: abc.com/search#s=abcid=23page=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页面状态保持思路详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • jQuery基于ajax实现页面加载后检查用户登录状态的方法
    • jQuery Ajax 实现在html页面实时显示用户登录状态
    上一篇:Ajax 向数据库修改和添加功能(较简答)
    下一篇:ajax实现修改功能
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    AJAX页面状态保持思路详解 AJAX,页面,状态,保持,思路,