使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL

 

使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5 <meta name="keywords" content="周记【学校晚会篇】" /><meta name="description" content="周记【学校晚会篇】   在这一周里我们13届的新生度过了在联合技校的第一个晚会,虽然我觉得这个晚会我觉得有点无聊,但是我觉得还是有点意思,怎么说都是我们的第一个晚会,总比在班上晚修爽多了。【哈哈哈哈啊哈哈哈哈哈】" /><link rel="shortcut icon" href="../images/school003_icon.png" type="image/x-icon" /> 
  6 <link type="text/css" href="../css/template.css" rel="stylesheet" />
  7 <script type="text/javascript" src="../script/jquery-1.8.2.min.js"></script>
  8 <script type="text/javascript" src="../script/jQuery.md5.js"></script>
  9 <!--[if IE 6]>
 10 <script type="text/javascript" src="../script/plugs/DD_belatedPNG_0.0.8a.js"></script>
 11     <script type="text/javascript">
 12         DD_belatedPNG.fix(‘img‘);
 13     </script>
 14 <![endif]-->
 15 <style type="text/css">
 16 #article_bar{
 17     width: 960px;
 18     height: auto;
 19     text-align: center;
 20     box-shadow:1px 1px 7px #222;
 21     border-radius: 10px;
 22     margin-bottom: 10px;
 23     background: #37291C;
 24     color: #fff;
 25 }
 26 #article_bar a{
 27     color: #FFFA85;
 28 }
 29 #article_bar ul li{
 30     width: 50px;
 31     height: 40px;
 32     line-height: 40px;
 33     float: left;
 34     margin-left: 28px;
 35 }
 36 #article_wrap{
 37     position: relative;
 38 }
 39 #article_list{
 40     width: 400px;
 41     height: auto;
 42     text-align: center;
 43     float: right;
 44     border-radius: 10px;
 45     box-shadow:1px 1px 7px #222;                            
 46     background: #37291C;
 47     margin-bottom: 10px;
 48 }
 49 #works_list{
 50     width: 400px;
 51     height: auto;
 52     text-align: center;
 53     clear: right;
 54     float: right;
 55     border-radius: 10px;
 56     box-shadow:1px 1px 7px #222;                            
 57     background: #37291C;
 58     margin-bottom: 10px;
 59 }
 60 #article_list_title,#works_list_title{
 61     font-size: 1.4em;
 62     height: 30px;
 63     line-height: 28px;
 64     width: 400px;
 65     text-align: center;
 66     color: #fff;
 67     border-top-left-radius: 10px;
 68     border-top-right-radius: 10px;
 69 }
 70 #article_list_content,#works_list_content{
 71     border-bottom-left-radius: 10px;
 72     border-bottom-right-radius: 10px;
 73 }
 74 #article_list_content ul li a,#works_list_content ul li a{
 75     color: #FFFA85;
 76 }
 77 #article_list_content ul li,#works_list_content ul li{
 78     margin-left: 10px;
 79     margin-bottom: 10px;
 80     text-align: left;
 81 }
 82 #article_ajax_content{
 83     width: 520px;
 84     box-shadow:1px 1px 7px #222;
 85     border-radius: 10px;
 86     background: #37291C;
 87     float: left;
 88     margin-right: 20px;
 89     padding: 10px;
 90     margin-bottom: 10px;
 91     color: #fff;
 92 }
 93 #article_ajax_content p{
 94     margin-bottom: 20px;
 95 }
 96 #article_wrap .page_bar{
 97     width: 340px;
 98     margin-left: auto;
 99     margin-right: auto;
100     text-align: center;
101     margin-bottom: 10px;
102 }
103 #article_wrap .page_bar a{
104     color: #fff;
105     text-decoration: none;
106 }
107 #article_wrap .page_bar ul li{
108     float: left;
109     margin-left: 10px;
110     width: 20px;
111     height: 20px;
112     line-height: 20px;
113     background: #788C35;
114     color: #FFF;
115     border-radius: 5px;
116 }
117 #link_wish_wall{
118     float: right;
119     clear: right;
120     width: 400px;
121     text-align: left;
122     border-radius: 10px;
123     box-shadow:1px 1px 7px #222;
124     margin-top: 10px;
125     color: #fff;
126     background: #788C35;
127     margin-bottom: 10px;
128 }
129 #link_wish_wall a{
130     color: #fff;
131     text-decoration: none;
132 }
133 #link_wish_wall p{
134     margin:8px;
135 }
136 .time{
137     margin-left: 10px;
138     color: #fff;
139     font-size: 0.8em;
140 }
141 #article_comment{
142     width: 400px;
143     height: auto;
144     text-align: center;
145     clear: right;
146     float: right;
147     border-radius: 10px;
148     box-shadow:1px 1px 7px #222;
149     background: #37291C;
150     color: #fff;
151     display: none;
152     margin-bottom: 10px;
153 }
154 #article_comment_content{
155     width: 360px;
156     margin-left: auto;
157     margin-right: auto;
158     border-top: 1px solid #fff;
159     border-bottom: 1px solid #fff;
160     margin-bottom: 5px;
161     text-align: left;
162     word-wrap:break-word;
163     overflow:hidden;
164 }
165 #article_comment_bottom{
166     width: 360px;
167     margin-left: auto;
168     margin-right: auto;
169 }
170 #article_comment_bottom_bar{
171     text-align: left;
172 }
173 #article_comment_submit,#article_comment_err{
174     margin-left: 6px;
175 }
176 #article_comment_err{
177     color: red;
178 }
179 #article_comment_submit{
180     cursor: pointer;
181 }
182 </style>
183 <title>周记【学校晚会篇】</title></head>
184 
185 <body>
186     <div id="container">
187         <script type="text/javascript">
188 $(document).ready(function(){
189         $(#login_btn).click(function(){
190             $.ajax({
191                 type: "POST",
192                 url: "http://www.school003.com/login.php",
193                 data: "user="+$(#login_user).val()+"&pwd="+$.md5($(#login_pwd).val()),
194                 success: function(msg){
195                     if(msg != 1){
196                        $(#login_error).html("用户名或密码错误!");
197                     }else{
198                        location.reload();
199                     }
200                 }
201             });
202         });
203         $(#login_exit).click(function(){
204             $.cookies.set(user,‘‘,{domain: .school003.com,path:/,expiresAt:new Date(2012,5,1),secure:false});//各参数要齐全(IE下不能设置Domian为localhost)否则无效
205             $.ajax({
206                type: "POST",
207                url: "http://www.school003.com/unLogin.php",
208                data: "user="+$(#login_user).val(),
209                success: function(msg){
210                    if(msg == "unLogin"){
211                        window.location.href = "http://www.school003.com/";
212                    }
213                }
214             });
215         });
216         $(#web_application).mouseover(function(){
217             $(#web_application_menu_list).show();
218         });
219         $(#web_application).mouseout(function(){
220             $(#web_application_menu_list).hide();
221         });
222 });
223 </script>
224         <script type="text/javascript">
225             var href = window.location.href;
226             function toQzoneLogin(){
227                 window.location.href = "http://www.school003.com/quickLoad/qq/index.php?href=" + href;
228             } 
229         </script>
230 <div id="head">
231     <div id="head_bar">
232         <div id="school003Logo">
233             <img src="http://www.school003.com/images/school003Logo.png">
234         </div>
235 
236         <!-- 登陆窗口 -->
237         <div id=‘login_box‘>
238             <div>
239                 用户:<input type=‘text‘ id=‘login_user‘ class=‘login_textbox‘>
240                 密码:<input type=‘password‘ id=‘login_pwd‘ class=‘login_textbox‘>
241                 <input type=‘button‘ value=‘登陆‘ id=‘login_btn‘>
242                 <span id=‘qqLoginBtn‘><a href="#" onclick=‘toQzoneLogin()‘><img src="http://www.school003.com/images/qq_login.png"></a></span>
243                 <span id=‘login_error‘>&nbsp;</span>
244             </div>
245         </div>
246         <!-- 应用中心 -->
247         <div id="web_application">
248             <div id="web_application_menu">应用中心</div>
249             <div id="web_application_menu_list">
250                 <ul>
251                     <li><a href="http://www.school003.com">本站主页</a></li>
252                     <li><a href="http://www.school003.com/works/">作品欣赏</a></li>
253                     <li><a href="http://www.school003.com/photo/">照片分享</a></li>
254                     <li><a href="http://www.school003.com/article/">文章分享</a></li>
255                     <li><a href="http://j.school003.com">上机练习</a></li>
256                     <li><a href="http://www.school003.com/grade/">在校成绩查询</a></li>
257                 </ul>
258             </div>
259         </div>
260 
261     </div>
262 </div>        <div id="nav">
263             <div id="nav_menu">
264                 <ul>
265                     <li><a href="http://www.school003.com">本站主页</a></li>
266                     <li><a href="http://www.school003.com/works/">作品欣赏</a></li>
267                     <li><a href="http://www.school003.com/photo/">照片分享</a></li>
268                     <li><a href="http://www.school003.com/article/">文章分享</a></li>
269                     <li><a href="http://j.school003.com">上机练习</a></li>
270                     <li><a href="http://www.school003.com/grade/">在校成绩查询</a></li>
271                     <li><a href="http://www.school003.com/special/" class="active">专辑</a></li>
272                 </ul>
273             </div>
274         </div>
275         <div id="main">
276             <div id="main_content">
277                 <div id=‘article_bar‘>
278                     <p>中计1331班成长笔记</p>
279                     <ul>
280                         <li><a href=‘uedu_13ZJ3101-normal-1.html‘>黄艳玲</a></li><li><a href=‘uedu_13ZJ3102-normal-1.html‘>成家乐</a></li><li><a href=‘uedu_13ZJ3103-normal-1.html‘>叶丽丽</a></li><li><a href=‘uedu_13ZJ3104-normal-1.html‘>潘欣婷</a></li><li><a href=‘uedu_13ZJ3105-normal-1.html‘>何远莲</a></li><li><a href=‘uedu_13ZJ3106-normal-1.html‘>黄本念</a></li><li><a href=‘uedu_13ZJ3107-normal-1.html‘>周伟锋</a></li><li><a href=‘uedu_13ZJ3108-normal-1.html‘>赖永枢</a></li><li><a href=‘uedu_13ZJ3109-normal-1.html‘>李仁福</a></li><li><a href=‘uedu_13ZJ3110-normal-1.html‘>梁旭超</a></li><li><a href=‘uedu_13ZJ3111-normal-1.html‘>符宏超</a></li><li><a href=‘uedu_13ZJ3112-normal-1.html‘>李天奇</a></li><li><a href=‘uedu_13ZJ3113-normal-1.html‘>廖华东</a></li><li><a href=‘uedu_13ZJ3114-normal-1.html‘>廖鹏程</a></li><li><a href=‘uedu_13ZJ3115-normal-1.html‘>庄滨瑜</a></li><li><a href=‘uedu_13ZJ3116-normal-1.html‘>李俊鹏</a></li><li><a href=‘uedu_13ZJ3117-normal-1.html‘>林良决</a></li><li><a href=‘uedu_13ZJ3118-normal-1.html‘>陈昌诚</a></li><li><a href=‘uedu_13ZJ3119-normal-1.html‘>林建浩</a></li><li><a href=‘uedu_13ZJ3120-normal-1.html‘>秦玉</a></li><li><a href=‘uedu_13ZJ3121-normal-1.html‘>林良彬</a></li><li><a href=‘uedu_13ZJ3122-normal-1.html‘>杨国绍</a></li><li><a href=‘uedu_13ZJ3123-normal-1.html‘>暨强安</a></li><li><a href=‘uedu_13ZJ3124-normal-1.html‘>傅彬</a></li><li><a href=‘uedu_13ZJ3125-normal-1.html‘>梁祥武</a></li><li><a href=‘uedu_13ZJ3126-normal-1.html‘>谢愉辉</a></li><li><a href=‘uedu_13ZJ3127-normal-1.html‘>胡承伟</a></li><li><a href=‘uedu_13ZJ3128-normal-1.html‘>苏广哲</a></li><li><a href=‘uedu_13ZJ3129-normal-1.html‘>刘煜</a></li><li><a href=‘uedu_13ZJ3130-normal-1.html‘>钟华青</a></li><li><a href=‘uedu_13ZJ3131-normal-1.html‘>许绍钟</a></li><li><a href=‘uedu_13ZJ3132-normal-1.html‘>莫进权</a></li><li><a href=‘uedu_13ZJ3133-normal-1.html‘>谭鹏</a></li><li><a href=‘uedu_13ZJ3134-normal-1.html‘>黄淦洪</a></li><li><a href=‘uedu_13ZJ3135-normal-1.html‘>袁润奇</a></li><li><a href=‘uedu_13ZJ3136-normal-1.html‘>王海涛</a></li><li><a href=‘uedu_13ZJ3137-normal-1.html‘>何景鑫</a></li><li><a href=‘uedu_13ZJ3138-normal-1.html‘>许金成</a></li><li><a href=‘uedu_13ZJ3139-normal-1.html‘>方璜</a></li><li><a href=‘uedu_13ZJ3140-normal-1.html‘>崔康华</a></li><li><a href=‘uedu_13ZJ3141-normal-1.html‘>张智锋</a></li><li><a href=‘uedu_13ZJ3142-normal-1.html‘>姚嘉豪</a></li><li><a href=‘uedu_13ZJ3143-normal-1.html‘>龙大林</a></li><li><a href=‘uedu_13ZJ3144-normal-1.html‘>唐权超</a></li><li><a href=‘uedu_13ZJ3145-normal-1.html‘>张其松</a></li><li><a href=‘uedu_13ZJ3146-normal-1.html‘>何珽薪</a></li><li><a href=‘uedu_13ZJ3147-normal-1.html‘>潘安</a></li><li><a href=‘uedu_13ZJ3148-normal-1.html‘>黄铎凯</a></li><li><a href=‘uedu_13ZJ3149-normal-1.html‘>吴彬林</a></li><li><a href=‘uedu_13ZJ3150-normal-1.html‘>陈俊杰</a></li><li><a href=‘uedu_13ZJ3151-normal-1.html‘>郑俊浩</a></li><li><a href=‘uedu_13ZJ3152-normal-1.html‘>候军建</a></li><li><a href=‘uedu_13ZJ3153-normal-1.html‘>黎家安</a></li><li><a href=‘uedu_13ZJ3154-normal-1.html‘>杨润钦</a></li><li><a href=‘uedu_13ZJ3155-normal-1.html‘>余俊</a></li><li><a href=‘uedu_13ZJ3156-normal-1.html‘>唐健</a></li><li><a href=‘uedu_13ZJ3157-normal-1.html‘>陈木林</a></li><li><a href=‘uedu_13ZJ3158-normal-1.html‘>林华增</a></li>                        
281                     </ul>
282                     <p style=‘clear:both‘></p>
283                 </div>
284                 <div id="article_wrap">
285                         <div id="article_ajax_content"><h2 style=‘text-align:center;margin-bottom:10px‘>周记【学校晚会篇】</h2><p>  在这一周里我们13届的新生度过了在联合技校的第一个晚会,虽然我觉得这个晚会我觉得有点无聊,但是我觉得还是有点意思,怎么说都是我们的第一个晚会,总比在班上晚修爽多了。【哈哈哈哈啊哈哈哈哈哈】</p></div><div id=‘article_list‘><div id=‘article_list_title‘>姚嘉豪</div><div id=‘article_list_content‘><ul><li><a href=‘uedu_13ZJ3142-article-001.html‘>1.【我期待的技校生活】</a><span class=‘time‘>2013-09-08</span></li><li><a href=‘uedu_13ZJ3142-article-002.html‘>2.周记1</a><span class=‘time‘>2013-09-10</span></li><li><a href=‘uedu_13ZJ3142-article-003.html‘>3.一件有意义的事</a><span class=‘time‘>2013-10-05</span></li><li><a href=‘uedu_13ZJ3142-article-004.html‘>4.周记</a><span class=‘time‘>2013-10-13</span></li><li><a href=‘uedu_13ZJ3142-article-011.html‘>5.寒假作业(鲁滨孙漂流记读后感)</a><span class=‘time‘>2014-02-15</span></li><li><a href=‘uedu_13ZJ3142-article-005.html‘>6.周记【学校晚会篇】</a><span class=‘time‘>2013-10-20</span></li><li><a href=‘uedu_13ZJ3142-article-006.html‘>7.读后感想</a><span class=‘time‘>2013-10-27</span></li><li><a href=‘uedu_13ZJ3142-article-007.html‘>8.第八周记</a><span class=‘time‘>2013-11-03</span></li><li><a href=‘uedu_13ZJ3142-article-008.html‘>9.第九周记</a><span class=‘time‘>2013-11-10</span></li><li><a href=‘uedu_13ZJ3142-article-009.html‘>10.第10周记</a><span class=‘time‘>2013-11-17</span></li></ul><p style=‘clear:both‘></p></div><div class=‘page_bar‘><ul><li><a href=‘uedu_13ZJ3142-article-p1.html‘>1</a></li><li><a href=‘uedu_13ZJ3142-article-p2.html‘>2</a></li></ul><p style=‘clear:both‘></p></div></div><div id=‘works_list‘><div id=‘works_list_title‘>个人作品</div><div id=‘works_list_content‘><ul><li><a href=‘uedu_13ZJ3142-works-001.html‘>1.姚嘉豪-自我介绍</a><span class=‘time‘>2013-11-16</span></li><li><a href=‘uedu_13ZJ3142-works-002.html‘>2.现代人</a><span class=‘time‘>2013-11-21</span></li></ul><p style=‘clear:both‘></p></div><div class=‘page_bar‘><ul></ul><p style=‘clear:both‘></p></div></div><div id="link_wish_wall"><a href="http://www.school003.com/article/wishWall.html"><p style="font-size:1.4em;text-align:center">许愿墙</p><p>1. wwwwwwwwwwwwwwwwww... 2014-09-18</p><p>2. 11111111111111... 2014-08-10</p><p>3. 好烦啊!感觉有好多... 2014-02-20</p></a></div><div id="article_comment"><p>留言板</p><div id="article_comment_content"></div><div id="article_comment_bottom"><p><textarea name="textarea" cols="40" rows="2" id="article_comment_textarea" style="resize:none"></textarea></p><p id="article_comment_bottom_bar"><span id="article_comment_submit">发表</span><span id="article_comment_err"></span></p></div></div><div style="clear:right;float:right;width:400px;height:60px;line-height:60px;margin-bottom:10px;border-radius: 10px;box-shadow:1px 1px 7px #222;background: #37291C;text-align:center;"><p><a href="grade/" target="_blank" style="font-size:24px;color:#fff;text-decoration:none;">查看考试成绩</a><p></div><p style="clear:both"></p>                
286                 </div>
287             </div>
288         </div>
289 <script type="text/javascript">
290 
291 var commentUser = ‘‘;
292 var typeId;
293 
294 $(#article_bar a).live(click, function () {
295     var state = { href: $(this).attr(href),title: $(this).text()};
296     if(!window.ActiveXObject){ 
297        history.pushState(state, document.title, state.href);
298     }
299     $.ajax({
300         type: "GET",
301         url: "controller.php",
302         data: "id="+$(this).attr(href).substr(0,$(this).attr(href).indexOf(.))+"&pjax=true",
303         success: function(msg){
304             $("#article_wrap").html(msg);        
305         }
306     });
307     document.title = $(this).text();
308     return false;
309 });
310 
311 
312 $(.page_bar a).live(click, function () {
313     //ajax返回的href,在IE下自动加httP://www....,故需过滤
314     if (window.ActiveXObject) {
315         var thisHref = $(this).attr(href).substr($(this).attr(href).lastIndexOf("/")+1);
316     }else{
317         var thisHref = $(this).attr(href);
318     }
319     var state = { href: $(this).attr(href),title: "分页内容"};
320     if(!window.ActiveXObject){ 
321        history.pushState(state, document.title, state.href);
322     }
323     $.ajax({
324         type: "GET",
325         url: "controller.php",
326         data: "id="+thisHref.substr(0,thisHref.indexOf(.))+"&pjax=true",
327         success: function(msg){
328             $("#article_list").html(msg);        
329         }
330     });
331     $("#article_comment").hide();
332     return false;
333 });
334 
335 
336 $(#article_list_content a,#works_list_content a).live(click, function () {
337     //ajax返回的href,在IE下自动加httP://www....,故需过滤
338     if (window.ActiveXObject) {
339         var thisHref = $(this).attr(href).substr($(this).attr(href).lastIndexOf("/")+1);
340     }else{
341         var thisHref = $(this).attr(href);
342     }
343     var state = { href: thisHref,title: $(this).text().substr($(this).text().indexOf(".")+1)};
344     typeId = thisHref.substr(0,thisHref.indexOf("."));
345     $("#article_comment").show();
346     if(!window.ActiveXObject){ 
347         history.pushState(state, document.title, state.href);
348     }
349     $.ajax({
350         type: "GET",
351         url: "controller.php",
352         data: "id="+thisHref+"&pjax=true",
353         success: function(msg){
354             $("#article_ajax_content").html(msg);        
355         }
356     });
357 
358     $.ajax({
359         type: "POST",
360         url: "comment.php",
361         data: "typeId="+typeId+"&a=true",
362         success: function(msg){
363             $("#article_comment_content").html(msg);        
364         }
365     });
366     $("#article_comment_textarea").val("");
367     $("#article_comment_err").html("");
368     document.title = $(this).text().substr($(this).text().indexOf(".")+1);
369     return false;
370 });
371 
372 var diffUser = false;
373 if(!window.ActiveXObject){ 
374 window.addEventListener(popstate, function(e){
375     if (history.state){
376         var state = e.state;
377         var href = state.href;
378         var count = href.split("-");
379         //获取URL后退的内容
380         $.ajax({
381             type: "GET",
382             url: "controller.php",
383             data: diffUser===false?"id="+href+"&pjax=true":"id="+href+"&pjax=true"+"&diffUser="+diffUser,
384             success: function(msg){
385                 if (diffUser === false) {
386                     switch(count[1]){
387                         case "normal":
388                             $("#article_wrap").html(msg);
389                             diffUser = true;
390                             break;
391                         case "works":
392                             if (count[2].indexOf("p") === 0) {
393                                 $("#works_list").html(msg);
394                             }else{
395                                 $("#article_ajax_content").html(msg);
396                             }
397                             diffUser = false;
398                             break;
399                         case "article":
400                             if (count[2].indexOf("p") === 0) {
401                                 $("#article_list").html(msg);
402                             }else{
403                                 $("#article_ajax_content").html(msg);
404                             }
405                             diffUser = false;
406                     }
407                 }else{
408                     $("#article_wrap").html(msg);
409                     diffUser = false;
410                 }
411             }
412         });
413         //获取同步的留言内容
414         typeId = href.substr(0,href.indexOf(".html"));
415         $.ajax({
416             type: "POST",
417             url: "comment.php",
418             data: "typeId="+typeId+"&a=true",
419             success: function(msg){
420                 $("#article_comment_content").html(msg);        
421             }
422         });
423         $("#article_comment_textarea").val("");
424         $("#article_comment_err").html("");
425         $("#article_comment").show();
426         document.title = state.title;
427     }
428 }, false);
429 }
430 
431 var allowSubmit = true;
432 $(#article_comment_submit).live(click, function () {
433     if ($.trim($("#article_comment_textarea").val()) == "") {$("#article_comment_err").html("内容不能为空");return false};
434     if (strlen($.trim($("#article_comment_textarea").val())) > 1500) {$("#article_comment_err").html("最多500个中文,1500个英文");return false};
435     if (commentUser == "") {$("#article_comment_err").html("请登陆");return false};
436     if (typeId == "") {$("#article_comment_err").html("该生未发表文章不能评论");return false};
437     if (allowSubmit === true) {
438         allowSubmit = false;
439         $.ajax({
440             type: "POST",
441             url: "comment.php",
442             data: "typeId="+typeId+"&content="+$("#article_comment_textarea").val().replace(/\n/g, ‘‘)+"&commentUser="+commentUser,
443             success: function(msg){
444                 $("#article_comment_content").html(msg);
445                 $("#article_comment_textarea").val("");
446                 $("#article_comment_err").html("");
447                 allowSubmit = true;
448             }
449         });
450     }
451 });
452 
453 function strlen(str){  
454     var len = 0;  
455     for (var i=0; i<str.length; i++) {   
456         var c = str.charCodeAt(i);
457         //单字节加1   
458         if ((c >= 0x0001 && c <= 0x007e) || (0xff60<=c && c<=0xff9f)) {
459             len++;
460         }else{
461             len+=3;
462         }
463     }   
464     return len;  
465 }
466 
467 </script>
468         
469 <div id="ad_left">
470 </div>
471 <div id="ad_right">
472 </div>    </div>
473     <div id="scrollToTop" onclick="window.scrollTo(‘0‘,‘0‘)"></div>
474 <!--
475 <div id="scrollToBottom" onclick="window.scrollTo(‘0‘,document.body.scrollHeight)">底部</div>
476 -->
477 
478 <div id="footer">
479     <div id="footer_bar">
480         <div id="footer_bar_index"><span><a href="http://www.school003.com">本站主页</a></span></div>
481         <div id="footer_bar_works">
482             <span><a href="http://www.school003.com/works/">作品欣赏</a></span>
483             <ul>
484                 
485             </ul>
486         </div>
487         <div id="footer_bar_photo">
488             <span><a href="http://www.school003.com/photo/">照片分享</a></span>
489             <ul>
490                 
491             </ul>
492         </div>
493         <div id="footer_bar_article">
494             <span><a href="http://www.school003.com/article/">文章分享</a></span>
495             <ul>
496                 
497                 
498             </ul>
499         </div>
500         <div id="footer_bar_onExercises">
501             <span><a href="http://j.school003.com">上机练习</a></span>
502             <ul>
503                 <li><a href="http://j.school003.com">计算机应用基础</a></li>
504             </ul>
505         </div>
506         <div id="footer_bar_schoolGrade">
507             <span><a href="http://www.school003.com/grade/">在校成绩查询</a></span>
508         </div>
509         <div id="weixin">
510             <img src="http://www.school003.com/images/weixin.jpg" width="100" height="100" alt="第三方校园网微信二维码" />
511         </div>
512     </div>
513     
514     
515     <div id="footer_copyright">
516         <p>Copyright&copy; 2014 school003.com All Rights Reserved. 版权所有 QQ:78945165
517 
518 <script type="text/javascript">
519 var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
520 document.write(unescape("%3Cscript src=‘" + _bdhmProtocol + "hm.baidu.com/h.js%3F721f10eb7e8bde6edd79f06f42485245‘ type=‘text/javascript‘%3E%3C/script%3E"));
521 </script>
522         </p></div>
523 </div>
524 <!-- Baidu Button BEGIN -->
525 <script type="text/javascript" id="bdshare_js" data="type=slide&amp;img=8&amp;pos=right&amp;uid=6780851" ></script>
526 <script type="text/javascript" id="bdshell_js"></script>
527 <script type="text/javascript">
528 document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000);
529 </script>
530 <!-- Baidu Button END -->
531 <!-- Piwik -->
532 <script type="text/javascript"> 
533   var _paq = _paq || [];
534   _paq.push([trackPageView]);
535   _paq.push([enableLinkTracking]);
536   (function() {
537     var u=(("https:" == document.location.protocol) ? "https" : "http") + "://www.school003.com/piwik//";
538     _paq.push([setTrackerUrl, u+piwik.php]);
539     _paq.push([setSiteId, 1]);
540     var d=document, g=d.createElement(script), s=d.getElementsByTagName(script)[0]; g.type=text/javascript;
541     g.defer=true; g.async=true; g.src=u+piwik.js; s.parentNode.insertBefore(g,s);
542   })();
543 
544 </script>
545 <noscript><p><img src="http://www.school003.com/piwik/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
546 <!-- End Piwik Code -->
547 <script>
548   (function(i,s,o,g,r,a,m){i[GoogleAnalyticsObject]=r;i[r]=i[r]||function(){
549   (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
550   m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
551   })(window,document,script,//www.google-analytics.com/analytics.js,ga);
552 
553   ga(create, UA-42913160-1, school003.com);
554   ga(send, pageview);
555 </script></body>
556 </html>
View Code

 

 

http://www.school003.com/special/uedu_13ZJ3142-article-005.html

 

http://blog.csdn.net/my_yang/article/details/7412588

 


在访问现在很火的google plus时,细心的用户也许会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变。并且能够很好的支持浏览器的前进和后退。不禁让人想问,是什么有这么强大的功能呢?

HTML5里引用了新的API,就是history.pushState和history.replaceState,就是通过这个接口做到无刷新改变页面URL的。

与传统的AJAX的区别

传统的ajax有如下的问题:

虽然ajax可以无刷新改变页面内容,但无法改变页面URL

其次为了更好的可访问性,内容发生改变后,改变URL的hash。但是hash的方式不能很好的处理浏览器的前进、后退等问题

有的浏览器引入了onhashchange的接口,不支持的浏览器只能定时去判断hash是否改变

再有,ajax的使用对搜索引擎很不友好,往往蜘蛛爬到的区域是空的

 

为了解决传统ajax带来的问题,HTML5里引入了新的API,即:history.pushState, history.replaceState

可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。

pushState是将指定的URL添加到浏览器历史里,replaceState是将指定的URL替换当前的URL。

如何调用

var state = {
	title: title,
	url: options.url,
	otherkey: othervalue
};
window.history.pushState(state, document.title, url);

state对象除了要title和url之外,也可以添加其他的数据,比如:还想将一些发送ajax的配置给保存起来。

replaceState和pushState是相似的,不需要多做解释。

如何响应浏览器的前进、后退操作

window对象上提供了onpopstate事件,上面传递的state对象会成为event的子对象,这样就可以拿到存储的title和URL了。

window.addEventListener(‘popstate‘, function(e){
  if (history.state){
	var state = e.state;
    //do something(state.url, state.title);
  }
}, false);

这样就可以结合ajax和pushState完美的进行无刷新浏览了。

一些限制

1、无法跨域,这个是必然的。引用曾经在网上看到的一句经典的话:“如果javascript可以跨域的话,那他就可以逆天了!”

2、state对象虽然可以存储很多自定义的属性,但值不能是个对象。

对应后端的一些处理

这种模式下除了当前使用ajax可以无刷新浏览外,还要保证直接请求改变的URL后也可以正常浏览,所以后端要对这些处理下。

1、对结合pushState的ajax可以发送一个特殊的头,如: setRequestHeader(‘PJAX’, ‘true’)。

2、后端获取到有PJAX=true的header时,将页面中通用的部分都不输出。比如:PHP可以通过下面的判断

function is_pjax(){
	return array_key_exists(‘HTTP_X_PJAX‘, $_SERVER) && $_SERVER[‘HTTP_X_PJAX‘] === ‘true‘;
}

虽然接口上只有pushState、replaceState、onpopstate,但在使用的时候还是要做很多处理的。

使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL

上一篇:Node.js v0.10.31API手册-Addons插件


下一篇:GitHub for Windows 2.0使用教程