使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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'> </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© 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&img=8&pos=right&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>
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,但在使用的时候还是要做很多处理的。