PHP页面实现局部刷新,无刷新加载的几种方法

朱雀 2023-06-10 12:23 89阅读 0赞

PHP页面实现局部刷新,无刷新加载方法其实挺多的。以前比较常用的是iframe这样来做。现在多了个ajax,所以一般情况下都是用的ajax。
第一种方法,ajax实现:
当然,ajax使用起来确实很简单就可以实现,但是里面的很多知识还是比较有点深的。我之前做页面时间自动刷新的功能就是用的ajax。完整代码是:
1.getTime.php:

  1. <?php
  2. header("cache-control:no-cache,must-revalidate");
  3. header("Content-Type:text/html;charset=utf-8");
  4. $time = "2012-1-20 18:00:00";
  5. $dt_element=explode(" ",$time);
  6. $date_element=explode("-",$dt_element[0]);
  7. $time_element=explode(":",$dt_element[1]);
  8. $date = mktime($time_element[0],$time_element[1],$time_element[2],$date_element[1],$date_element[2],$date_element[0]);
  9. $nowTime = time();
  10. $showtime = date("北京时间Y年m月d日H:i:s",$date-$nowTime);
  11. if($showtime<="北京时间1970年01月01日08:00:00"){
  12. echo "happy new year";
  13. }
  14. echo $showtime;

2.zidong.php:

  1. </head>
  2. <body>
  3. <h1>Ajax动态显示时间</h1>
  4. <input type="button" value="开始显示时间" id="go" onclick="start()" />
  5. <p>当前时间:<font color="red"><span id="showtime"></span></font></p>
  6. </body>
  7. <script type="text/javascript">
  8. var xmlHttp;
  9. function createXMLHttpRequest(){
  10. if(window.ActiveXObject){
  11. xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  12. }
  13. else if(window.XMLHttpRequest){
  14. xmlHttp = new XMLHttpRequest();
  15. }
  16. }
  17. function start(){
  18. createXMLHttpRequest();
  19. var url="getTime.php";
  20. xmlHttp.open("GET",url,true);
  21. xmlHttp.onreadystatechange = callback;
  22. xmlHttp.send(null);
  23. }
  24. function callback(){
  25. if(xmlHttp.readyState == 4){
  26. if(xmlHttp.status == 200){
  27. document.getElementById("showtime").innerHTML = xmlHttp.responseText;
  28. setTimeout("start()",1000);
  29. }
  30. }
  31. }
  32. </script>
  33. </html>

在浏览器里面直接访问zidong.php就可以了,点击里面的按钮就可以看到效果。
这个就是用ajax做的刷新页面局部内容的小例子。你可能会怀疑:这里面没有跟数据库交互啊?这还不简单,直接在getTime.php页面里面操作就可以啦。
这种方法就不用多说了吧。至于ajax里面的代码是什么意思,不要问我啦,我之前就说过,这里面的ajax还是有点深的。

第二种方法:使用iframe方法实现。
不要给我说用PHP 的include可以啊。你去试试吧。可以,可以就不会有那么多人在百度里面问了。
这种方法呢说起来复杂,其实还是挺简单的。专访网作者说下原理吧:
要刷新的页面中把要自动刷新的局部的代码单独拿出来,做成一个独立的页面,自动刷新有很多种方法:可以在这个独立页面中用javascript来控制,什么setTimeout(“start()”,1000);啊或者setInterval(“start()”,1000);(每隔1秒刷新页面)这样,还可以用meta标签实现:(每隔10秒刷新页面)。这样在原来的页面中用iframe来将它调用过来。这样就可以了。
还是上示例代码吧:

1.show.php:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <!--<meta http-equiv="refresh" content="5">-->
  6. <title>Admin</title>
  7. <script language="javascript" type="text/javascript" src="/extend/js/json.js" ></script>
  8. <script language="javascript" type="text/javascript" src="/extend/menus.js"></script>
  9. <script language="javascript" type="text/javascript" src="/extend/js/jquery-1.4.2.js"></script>
  10. <link href="/css/main.css" rel="stylesheet" type="text/css" />
  11. <link href="/css/question.css" rel="stylesheet" type="text/css" />
  12. <script type="text/javascript">
  13. //下面的isKeyTrigger()、ctrlEnter()、submitContent()方法是响应键盘事件提交内容的。兼容性不错。
  14. function isKeyTrigger(e,keyCode){
  15. var argv = isKeyTrigger.arguments;
  16. var argc = isKeyTrigger.arguments.length;
  17. var bCtrl = false;
  18. if(argc > 2){
  19. bCtrl = argv[2];
  20. }
  21. var bAlt = false;
  22. if(argc > 3){
  23. bAlt = argv[3];
  24. }
  25. var nav4 = window.Event ? true : false;
  26. if(typeof e == 'undefined') {
  27. e = event;
  28. }
  29. if( bCtrl &&
  30. !((typeof e.ctrlKey != 'undefined') ?
  31. e.ctrlKey : e.modifiers & Event.CONTROL_MASK > 0)){
  32. return false;
  33. }
  34. if( bAlt &&
  35. !((typeof e.altKey != 'undefined') ?
  36. e.altKey : e.modifiers & Event.ALT_MASK > 0)){
  37. return false;
  38. }
  39. var whichCode = 0;
  40. if (nav4) whichCode = e.which;
  41. else if (e.type == "keypress" || e.type == "keydown")
  42. whichCode = e.keyCode;
  43. else whichCode = e.button;
  44. return (whichCode == keyCode);
  45. }
  46. function ctrlEnter(e){
  47. var ie =navigator.appName=="Microsoft Internet Explorer"?true:false;
  48. if(ie){
  49. if(event.ctrlKey && window.event.keyCode==13){
  50. submitContent();
  51. }
  52. }else{
  53. if(isKeyTrigger(e,13,true)){
  54. submitContent();
  55. }
  56. }
  57. }
  58. function submitContent(){
  59. save_answer();
  60. }
  61. function save_answer(){
  62. var $content = $('#answer').val();
  63. var $save_answer_url = '<?php echo $save_answer_url;?>';
  64. if ( $content == '' ){
  65. alert("no data!");
  66. return;
  67. }
  68. var $post_data = {
  69. content : $content ,
  70. qid:'<?php echo $question['ID'];?>',
  71. uid:'<?php echo $questionUser['ID'];?>'
  72. };
  73. //alert($save_answer_url);
  74. $.ajax({
  75. type : 'post' ,
  76. url : $save_answer_url ,
  77. data : $post_data ,
  78. success : function( e ){
  79. var $rs = JSON.decode( e );
  80. if ( $rs.succ == 1 ){
  81. alert("answer success!");
  82. $('#answer').val("");
  83. location.reload(); //刷新页面
  84. } else {
  85. alert( $rs.msg );
  86. }
  87. }
  88. });
  89. }
  90. //删除答案
  91. function deleteanswer($id){
  92. var $delete_answer_url = '<?php echo $delete_answer_url;?>';
  93. var $post_data = {
  94. id : $id
  95. };
  96. if(confirm("are you sure delete?")){
  97. $.ajax({
  98. type : 'post' ,
  99. url : $delete_answer_url,
  100. data : $post_data ,
  101. success : function( e ){
  102. var $rs = JSON.decode( e );
  103. if ( $rs.succ == 1 ){
  104. alert("delete success!");
  105. location.reload(); //刷新页面
  106. } else {
  107. alert( $rs.msg );
  108. }
  109. }
  110. });
  111. }
  112. else{
  113. return;
  114. }
  115. }
  116. 设置为最佳答案
  117. //function setbestanswer($id,$aid){
  118. // var $set_bestanswer_url = '<?php echo $set_bestanswer_url;?>';
  119. // var $post_data = {
  120. // id : $id ,
  121. // aid : $aid
  122. // };
  123. // if(confirm("are you sure set this answer is best?")){
  124. // $.ajax({
  125. // type : 'post' ,
  126. // url : $set_bestanswer_url,
  127. // data : $post_data ,
  128. // success : function( e ){
  129. // var $rs = JSON.decode( e );
  130. // if ( $rs.succ == 1 ){
  131. // alert("set success!");
  132. // location.reload(); //刷新页面
  133. // } else {
  134. // alert( $rs.msg );
  135. // }
  136. // }
  137. // });
  138. // }
  139. // else{
  140. // return;
  141. // }
  142. //
  143. //}
  144. </script>
  145. <!--<script language="javascript">-->
  146. <!--setInterval("myajax();",1000);-->
  147. <!--function myajax()-->
  148. <!--{-->
  149. <!-- //获取信息json数组 -->
  150. <!-- var html2 = "";-->
  151. <!-- html2 = "<table id=\"answerTable\"><tr><td class=\"answerHead\" colspan=\"2\"> 回答:"+-->
  152. <!-- "</td></tr><tr><td><iframe width=0 height=0 src=\"check_new.php\"></iframe></td></tr>"+-->
  153. <!-- "<?php if (isset($answers) && !empty($answers)) {foreach ($answers as $key=>$value){?>"+-->
  154. <!-- "<tr><td class=\"boss\">"+-->
  155. <!-- "<?php echo $value['Answer'];?>"+-->
  156. <!-- "</td><td style=\"text-align:right;\">"+-->
  157. <!-- "<?php if($_SESSION['ADMINISTRATOR']){?>"+-->
  158. <!-- "<a href=\"javascript:deleteanswer(<?php echo $value['ID'];?>);\">"+-->
  159. <!-- "<img src=\"/images/questiondelete.jpg\" style=\"border:0;\"/></a>"+-->
  160. <!-- "<?php }?>"+-->
  161. <!-- "</td></tr><tr><td class=\"answerAuthor\" colspan=\"2\">回答者:"+-->
  162. <!-- "<?php echo $value['Email'];?>"+-->
  163. <!-- " 回答时间:"+-->
  164. <!-- "<?php echo $value['Date'];?>"+-->
  165. <!-- "</td></tr><tr><td colspan=\"2\"><hr style=\"border: 1px dashed #ccc; width: 100%; height: 1px;\" /></td></tr>"+-->
  166. <!-- "<?php }}else{?>"+-->
  167. <!-- "<tr><td style=\"text-align:center;height:80px;\" colspan=\"2\">该问题目前还没有用户回答,你可以在下面填写内容来回答</td></tr>"+-->
  168. <!-- "<?php }?> </table>";-->
  169. <!-- $("#answerDiv").html(html2);-->
  170. <!--}-->
  171. <!--</script>-->
  172. <!--<script type="text/javascript">-->
  173. <!--var xmlHttp;-->
  174. <!--function createXMLHttpRequest(){-->
  175. <!-- if(window.ActiveXObject){-->
  176. <!-- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");-->
  177. <!-- }-->
  178. <!-- else if(window.XMLHttpRequest){-->
  179. <!-- xmlHttp = new XMLHttpRequest();-->
  180. <!-- }-->
  181. <!--}-->
  182. <!--function start(){-->
  183. <!-- //alert("laslfda;f");-->
  184. <!-- createXMLHttpRequest();-->
  185. <!-- var url="/extend/check_new.php?sid="+Math.random()";-->
  186. <!-- //var url = "../../view/product/check_new.php";-->
  187. <!-- //alert(url);-->
  188. <!-- xmlHttp.open("GET",url,true);-->
  189. <!-- //alert(url);-->
  190. <!-- xmlHttp.onreadystatechange = callback;-->
  191. <!-- xmlHttp.send(null);-->
  192. <!--}-->
  193. <!--function callback(){-->
  194. <!-- if(xmlHttp.readyState == 4){-->
  195. <!-- //alert("asdflasdf");-->
  196. <!-- //if(xmlHttp.status == 200){-->
  197. <!-- document.getElementById("answerDiv").innerHTML = xmlHttp.responseText;-->
  198. <!-- //alert(document.getElementById("answerDiv").innerHTML);-->
  199. <!-- setTimeout("start()",1000);-->
  200. <!-- //}-->
  201. <!-- //alert(xmlHttp.status);-->
  202. <!-- }-->
  203. <!--}-->
  204. <!--setInterval("start()",1000);-->
  205. <!--</script>-->
  206. </head>
  207. <body onkeydown="javascript:ctrlEnter(event);">
  208. <center>
  209. <div class="Container">
  210. <table>
  211. <tr>
  212. <th class="zongHead" colspan="2"> 产品问题及回答详细列表</th>
  213. </tr>
  214. <tr>
  215. <td colspan="2"><hr/></td>
  216. </tr>
  217. <tr>
  218. <td class="questionHead" colspan="2"> 该问题详细内容:</td>
  219. </tr>
  220. <?php
  221. if (isset($question) && !empty($question)) {
  222. ?>
  223. <tr>
  224. <td class="questionContent" colspan="2"><?php echo $question['Question'];?></td>
  225. </tr>
  226. <tr>
  227. <td class="author" colspan="2">提问者:<?php echo $questionUser['Email'];?> 提问时间:<?php echo $question['Date'];?></td>
  228. </tr>
  229. <?php
  230. }
  231. ?>
  232. <tr>
  233. <td colspan="2"><hr/></td>
  234. </tr>
  235. </table>
  236. <iframe src="<?php echo get_url(array('m'=>'product','a'=>'product_newmsg','qid'=>$qid));?>" scrolling="no" frameborder="0" width="999px" onload="this.height=this.contentWindow.document.documentElement.scrollHeight"></iframe>
  237. <!--<div id="answerDiv" class="answerDiv">
  238. <table id="answerTable">
  239. <tr>
  240. <td class="answerHead" colspan="2"> 回答:</td>
  241. </tr>
  242. <tr>
  243. <td><iframe width=0 height=0 src="check_new.php"></iframe></td>
  244. </tr>
  245. <?php
  246. if (isset($answers) && !empty($answers)) {
  247. foreach ($answers as $key=>$value){
  248. ?>
  249. <tr>
  250. <td class="boss"><?php echo $value['Answer'];?></td>
  251. <td style="text-align:right;">
  252. <?php
  253. if($_SESSION['ADMINISTRATOR']){//如果$_SESSION['ADMINISTRATOR']=0,即不是超级管理员,则不显示删除按钮
  254. ?>
  255. <a href="javascript:deleteanswer(<?php echo $value['ID'];?>);"><img src="/images/questiondelete.jpg" style="border:0;"/></a>
  256. <?php
  257. }
  258. ?>
  259. </td>
  260. </tr>
  261. <tr>
  262. <td class="answerAuthor" colspan="2">回答者:<?php echo $value['Email'];?> 回答时间:<?php echo $value['Date'];?></td>
  263. </tr>
  264. <tr>
  265. <td colspan="2"><hr style="border: 1px dashed #ccc; width: 100%; height: 1px;" /></td>
  266. </tr>
  267. <?php
  268. }
  269. }else{
  270. ?>
  271. <tr>
  272. <td style="text-align:center;height:80px;" colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td>
  273. </tr>
  274. <?php
  275. }
  276. ?>
  277. </table>
  278. </div>
  279. --><table class="youWrite">
  280. <tr>
  281. <td>你也回答一下吧:</td>
  282. </tr>
  283. <tr>
  284. <td>
  285. <textarea rows="10" cols="80" id="answer" name="answer"></textarea>
  286. </td>
  287. </tr>
  288. <tr>
  289. <td class="submits"><a href="javascript:save_answer();"><img style="border:0;" src="/images/questionbutton.jpg"/></a></td>
  290. </tr>
  291. </table>
  292. </div>
  293. </center>
  294. </body>
  295. </html>
  296. 2.product_newmsg.php:

2.product_newmsg.php:

  1. <meta http-equiv="Refresh" content="10">
  2. <script language="javascript" type="text/javascript" src="/extend/js/json.js" ></script>
  3. <script language="javascript" type="text/javascript" src="/extend/menus.js"></script>
  4. <script language="javascript" type="text/javascript" src="/extend/js/jquery-1.4.2.js"></script>
  5. <link href="/css/main.css" rel="stylesheet" type="text/css" />
  6. <link href="/css/question.css" rel="stylesheet" type="text/css" />
  7. <script type="text/javascript">
  8. //删除答案
  9. function deleteanswer($id){
  10. var $delete_answer_url = '<?php echo $delete_answer_url;?>';
  11. var $post_data = {
  12. id : $id
  13. };
  14. if(confirm("are you sure delete?")){
  15. $.ajax({
  16. type : 'post' ,
  17. url : $delete_answer_url,
  18. data : $post_data ,
  19. success : function( e ){
  20. var $rs = JSON.decode( e );
  21. if ( $rs.succ == 1 ){
  22. alert("delete success!");
  23. location.reload(); //刷新页面
  24. } else {
  25. alert( $rs.msg );
  26. }
  27. }
  28. });
  29. }
  30. else{
  31. return;
  32. }
  33. }
  34. </script>
  35. <div id="answerDiv" class="answerDiv">
  36. <table id="answerTable">
  37. <tr>
  38. <td class="answerHead" colspan="2"> 回答:</td>
  39. </tr>
  40. <!-- <tr>-->
  41. <!--<td><iframe width=0 height=0 src="check_new.php"></iframe></td>-->
  42. <!-- </tr>-->
  43. <?php
  44. if (isset($answers) && !empty($answers)) {
  45. foreach ($answers as $key=>$value){
  46. ?>
  47. <tr>
  48. <td class="boss"><?php echo $value['Answer'];?></td>
  49. <td style="text-align:right;">
  50. <?php
  51. if($_SESSION['ADMINISTRATOR']){//如果$_SESSION['ADMINISTRATOR']=0,即不是超级管理员,则不显示删除按钮
  52. ?>
  53. <a href="javascript:deleteanswer(<?php echo $value['ID'];?>);"><img src="/images/questiondelete.jpg" style="border:0;"/></a>
  54. <?php
  55. }
  56. ?>
  57. </td>
  58. </tr>
  59. <tr>
  60. <td class="answerAuthor" colspan="2">回答者:<?php echo $value['Email'];?> 回答时间:<?php echo $value['Date'];?></td>
  61. </tr>
  62. <tr>
  63. <td colspan="2"><hr style="border: 1px dashed #ccc; width: 100%; height: 1px;" /></td>
  64. </tr>
  65. <?php
  66. }
  67. }else{
  68. ?>
  69. <tr>
  70. <td style="text-align:center;height:80px;" colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td>
  71. </tr>
  72. <?php
  73. }
  74. ?>
  75. </table>
  76. </div>

这样就可以实现了。在浏览器中访问show.php就可以看到效果了。但是这个示例里面有很多东西操作了数据库。直接访问没什么效果。但是代码肯定是可以的。里面的原理和代码都是完整的。
好了。这里必学智库小编就介绍这两种方法。有这两种方法已经可以完成基本上所有的页面局部刷新了。

发表评论

表情:
评论列表 (有 0 条评论,89人围观)

还没有评论,来说两句吧...

相关阅读

    相关 页面局部刷新

    场景:页面A使用第三方插件C,如果页面刷新,C会重新初始化并且无法记录之前的信息。现在希望页面的主要功能区B刷新,但是C的信息不要丢失。 解决方案:B采用iframe方式...