AJAX的刷新和前进后退问题解决

使用AJAX开发分页功能的时候,用户跳转到第5页,但是刷新以后又显示第一页了,能不能刷新后还显示第5页?还有能不能用浏览器的前进后退按钮来浏览AJAX历次的变化。

因为Javascript对dom的操作是不持久化的,刷新后就恢复原状,而且也不保存历史记录,也就无法前进后退来查看历史了。但是可以采用“地址栏加hash”技术来解决。

地址栏中敲入“页面地址#aaa”就表示跳转到“页面地址 ”的“aaa”这个页内锚点(英文叫做hash)。只要改变“aaa”这个锚点内容,浏览器就认为URL变化,也就会放入浏览历史,这样前进后退问题就解决了。我们只要把不同的AJAX状态通过不同的hash写到地址栏就可以了,当页面加载的时候检测是否有hash值,有的话就读取hash进行相应的ajax还原操作。

location.hash可以取到或者设置hash的值,当hash改变的时候window.onhashchange事件会被触发,但是页面加载的时候哪怕有hash值,onhashchange事件也不会触发,因此需要在onload事件中也读取hash进行同样的处理,保证刷新页面也能恢复ajax的页面显示。

下面是例子代码,为了简单的突出问题,这里没有使用ajax,只是通过dom来修改页面状态。点击文本框,文本框的内容会加1(注意观察地址栏),刷新页面后值也还是增加后的值,而且页面可以前进后退。
代码如下:
[html]  view plain  copy
 print ?
  1. <!DOCTYPE html>  
  2.    
  3. <html xmlns="http://www.w3.org/1999/xhtml">  
  4.    
  5. <head>  
  6.    
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
  8.    
  9.     <title></title>  
  10.    
  11.     <script src="jquery-1.4.1.js"></script>  
  12.    
  13.     <script type="text/javascript">  
  14.    
  15.         var processHash = function () {  
  16.    
  17.             var hashStr = location.hash.replace("#", "");  
  18.    
  19.             if (hashStr) $("#txt1").val(hashStr);  
  20.    
  21.         }  
  22.    
  23.         $(function () {  
  24.    
  25.             $("#txt1").click(function () {  
  26.    
  27.                 var i = parseInt($("#txt1").val());  
  28.    
  29.                 i++;  
  30.    
  31.                 $("#txt1").text(i);  
  32.    
  33.                 location.hash = "#" + i;  
  34.    
  35.             });  
  36.    
  37.             window.onload = processHash;  
  38.    
  39.             window.onhashchange = processHash;  
  40.    
  41.         });  
  42.    
  43.     </script>  
  44.    
  45. </head>  
  46.    
  47. <body>  
  48.    
  49.     <input type="text" id="txt1" value="1" />  
  50.    
  51. </body>  
  52.    
  53. </html>  
  54.    
    原文地址:http://blog.csdn.net/resigshy/article/details/8046595
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值