Posted in PHP onJune 21, 2013
方法其实挺多的。以前比较常用的是iframe这样来做。现在多了个ajax,所以一般情况下都是用的ajax。
第一种方法,ajax实现:
当然,ajax使用起来确实很简单就可以实现,但是里面的很多知识还是比较有点深的。我之前做页面时间自动刷新的功能就是用的ajax。完整代码是:
1.getTime.php:
<?php header("cache-control:no-cache,must-revalidate"); header("Content-Type:text/html;charset=utf-8"); $time = "2012-1-20 18:00:00"; $dt_element=explode(" ",$time); $date_element=explode("-",$dt_element[0]); $time_element=explode(":",$dt_element[1]); $date = mktime($time_element[0],$time_element[1],$time_element[2],$date_element[1],$date_element[2],$date_element[0]); $nowTime = time(); $showtime = date("北京时间Y年m月d日H:i:s",$date-$nowTime); if($showtime<="北京时间1970年01月01日08:00:00"){ echo "happy new year"; } echo $showtime;
2.zidong.php:
</head> <body> <h1>Ajax动态显示时间</h1> <input type="button" value="开始显示时间" id="go" onclick="start()" /> <p>当前时间:<font color="red"><span id="showtime"></span></font></p> </body> <script type="text/javascript"> var xmlHttp; function createXMLHttpRequest(){ if(window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else if(window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); } } function start(){ createXMLHttpRequest(); var url="getTime.php"; xmlHttp.open("GET",url,true); xmlHttp.onreadystatechange = callback; xmlHttp.send(null); } function callback(){ if(xmlHttp.readyState == 4){ if(xmlHttp.status == 200){ document.getElementById("showtime").innerHTML = xmlHttp.responseText; setTimeout("start()",1000); } } } </script> </html>
在浏览器里面直接访问zidong.php就可以了,点击里面的按钮就可以看到效果。
这个就是用ajax做的刷新页面局部内容的小例子。你可能会怀疑:这里面没有跟数据库交互啊?这还不简单,直接在getTime.php页面里面操作就可以啦。
这种方法就不用多说了吧。至于ajax里面的代码是什么意思,不要问我啦,我之前就说过,这里面的ajax还是有点深的。
第二种方法:使用iframe方法实现。
不要给我说用PHP 的include可以啊。你去试试吧。可以,可以就不会有那么多人在百度里面问了。
这种方法呢说起来复杂,其实还是挺简单的。说下原理吧:
要刷新的页面中把要自动刷新的局部的代码单独拿出来,做成一个独立的页面,自动刷新有很多种方法:可以在这个独立页面中用javascript来控制,什么setTimeout("start()",1000);啊或者setInterval("start()",1000);(每隔1秒刷新页面)这样,还可以用meta标签实现:<meta http-equiv="Refresh" content="10">(每隔10秒刷新页面)。这样在原来的页面中用iframe来将它调用过来。这样就可以了。
还是上示例代码吧:
1.show.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!--<meta http-equiv="refresh" content="5">--> <title>Admin</title> <script language="javascript" type="text/javascript" src="/extend/js/json.js" ></script> <script language="javascript" type="text/javascript" src="/extend/menus.js"></script> <script language="javascript" type="text/javascript" src="/extend/js/jquery-1.4.2.js"></script> <link href="/css/main.css" rel="stylesheet" type="text/css" /> <link href="/css/question.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> //下面的isKeyTrigger()、ctrlEnter()、submitContent()方法是响应键盘事件提交内容的。兼容性不错。 function isKeyTrigger(e,keyCode){ var argv = isKeyTrigger.arguments; var argc = isKeyTrigger.arguments.length; var bCtrl = false; if(argc > 2){ bCtrl = argv[2]; } var bAlt = false; if(argc > 3){ bAlt = argv[3]; } var nav4 = window.Event ? true : false; if(typeof e == 'undefined') { e = event; } if( bCtrl && !((typeof e.ctrlKey != 'undefined') ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK > 0)){ return false; } if( bAlt && !((typeof e.altKey != 'undefined') ? e.altKey : e.modifiers & Event.ALT_MASK > 0)){ return false; } var whichCode = 0; if (nav4) whichCode = e.which; else if (e.type == "keypress" || e.type == "keydown") whichCode = e.keyCode; else whichCode = e.button; return (whichCode == keyCode); } function ctrlEnter(e){ var ie =navigator.appName=="Microsoft Internet Explorer"?true:false; if(ie){ if(event.ctrlKey && window.event.keyCode==13){ submitContent(); } }else{ if(isKeyTrigger(e,13,true)){ submitContent(); } } } function submitContent(){ save_answer(); } function save_answer(){ var $content = $('#answer').val(); var $save_answer_url = '<?php echo $save_answer_url;?>'; if ( $content == '' ){ alert("no data!"); return; } var $post_data = { content : $content , qid:'<?php echo $question['ID'];?>', uid:'<?php echo $questionUser['ID'];?>' }; //alert($save_answer_url); $.ajax({ type : 'post' , url : $save_answer_url , data : $post_data , success : function( e ){ var $rs = JSON.decode( e ); if ( $rs.succ == 1 ){ alert("answer success!"); $('#answer').val(""); location.reload(); //刷新页面 } else { alert( $rs.msg ); } } }); } //删除答案 function deleteanswer($id){ var $delete_answer_url = '<?php echo $delete_answer_url;?>'; var $post_data = { id : $id }; if(confirm("are you sure delete?")){ $.ajax({ type : 'post' , url : $delete_answer_url, data : $post_data , success : function( e ){ var $rs = JSON.decode( e ); if ( $rs.succ == 1 ){ alert("delete success!"); location.reload(); //刷新页面 } else { alert( $rs.msg ); } } }); } else{ return; } } ////设置为最佳答案 //function setbestanswer($id,$aid){ // var $set_bestanswer_url = '<?php echo $set_bestanswer_url;?>'; // var $post_data = { // id : $id , // aid : $aid // }; // if(confirm("are you sure set this answer is best?")){ // $.ajax({ // type : 'post' , // url : $set_bestanswer_url, // data : $post_data , // success : function( e ){ // var $rs = JSON.decode( e ); // if ( $rs.succ == 1 ){ // alert("set success!"); // location.reload(); //刷新页面 // } else { // alert( $rs.msg ); // } // } // }); // } // else{ // return; // } // //} </script> <!--<script language="javascript">--> <!--setInterval("myajax();",1000);--> <!--function myajax()--> <!--{--> <!-- //获取信息json数组 --> <!-- var html2 = "";--> <!-- html2 = "<table id=\"answerTable\"><tr><td class=\"answerHead\" colspan=\"2\"> 回答:"+--> <!-- "</td></tr><tr><td><iframe width=0 height=0 src=\"check_new.php\"></iframe></td></tr>"+--> <!-- "<?php if (isset($answers) && !empty($answers)) {foreach ($answers as $key=>$value){?>"+--> <!-- "<tr><td class=\"boss\">"+--> <!-- "<?php echo $value['Answer'];?>"+--> <!-- "</td><td style=\"text-align:right;\">"+--> <!-- "<?php if($_SESSION['ADMINISTRATOR']){?>"+--> <!-- "<a href=\"javascript:deleteanswer(<?php echo $value['ID'];?>);\">"+--> <!-- "<img src=\"/images/questiondelete.jpg\" style=\"border:0;\"/></a>"+--> <!-- "<?php }?>"+--> <!-- "</td></tr><tr><td class=\"answerAuthor\" colspan=\"2\">回答者:"+--> <!-- "<?php echo $value['Email'];?>"+--> <!-- " 回答时间:"+--> <!-- "<?php echo $value['Date'];?>"+--> <!-- "</td></tr><tr><td colspan=\"2\"><hr style=\"border: 1px dashed #ccc; width: 100%; height: 1px;\" /></td></tr>"+--> <!-- "<?php }}else{?>"+--> <!-- "<tr><td style=\"text-align:center;height:80px;\" colspan=\"2\">该问题目前还没有用户回答,你可以在下面填写内容来回答</td></tr>"+--> <!-- "<?php }?> </table>";--> <!-- $("#answerDiv").html(html2);--> <!--}--> <!--</script>--> <!--<script type="text/javascript">--> <!--var xmlHttp;--> <!--function createXMLHttpRequest(){--> <!-- if(window.ActiveXObject){--> <!-- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");--> <!-- }--> <!-- else if(window.XMLHttpRequest){--> <!-- xmlHttp = new XMLHttpRequest();--> <!-- }--> <!--}--> <!--function start(){--> <!-- //alert("laslfda;f");--> <!-- createXMLHttpRequest();--> <!-- var url="/extend/check_new.php?sid="+Math.random()";--> <!-- //var url = "../../view/product/check_new.php";--> <!-- //alert(url);--> <!-- xmlHttp.open("GET",url,true);--> <!-- //alert(url);--> <!-- xmlHttp.onreadystatechange = callback;--> <!-- xmlHttp.send(null);--> <!--}--> <!--function callback(){--> <!-- if(xmlHttp.readyState == 4){--> <!-- //alert("asdflasdf");--> <!-- //if(xmlHttp.status == 200){--> <!-- document.getElementById("answerDiv").innerHTML = xmlHttp.responseText;--> <!-- //alert(document.getElementById("answerDiv").innerHTML);--> <!-- setTimeout("start()",1000);--> <!-- //}--> <!-- //alert(xmlHttp.status);--> <!-- }--> <!--}--> <!--setInterval("start()",1000);--> <!--</script>--> </head> <body onkeydown="javascript:ctrlEnter(event);"> <center> <div class="Container"> <table> <tr> <th class="zongHead" colspan="2"> 产品问题及回答详细列表</th> </tr> <tr> <td colspan="2"><hr/></td> </tr> <tr> <td class="questionHead" colspan="2"> 该问题详细内容:</td> </tr> <?php if (isset($question) && !empty($question)) { ?> <tr> <td class="questionContent" colspan="2"><?php echo $question['Question'];?></td> </tr> <tr> <td class="author" colspan="2">提问者:<?php echo $questionUser['Email'];?> 提问时间:<?php echo $question['Date'];?></td> </tr> <?php } ?> <tr> <td colspan="2"><hr/></td> </tr> </table> <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> <!--<div id="answerDiv" class="answerDiv"> <table id="answerTable"> <tr> <td class="answerHead" colspan="2"> 回答:</td> </tr> <tr> <td><iframe width=0 height=0 src="check_new.php"></iframe></td> </tr> <?php if (isset($answers) && !empty($answers)) { foreach ($answers as $key=>$value){ ?> <tr> <td class="boss"><?php echo $value['Answer'];?></td> <td style="text-align:right;"> <?php if($_SESSION['ADMINISTRATOR']){//如果$_SESSION['ADMINISTRATOR']=0,即不是超级管理员,则不显示删除按钮 ?> <a href="javascript:deleteanswer(<?php echo $value['ID'];?>);"><img src="/images/questiondelete.jpg" style="border:0;"/></a> <?php } ?> </td> </tr> <tr> <td class="answerAuthor" colspan="2">回答者:<?php echo $value['Email'];?> 回答时间:<?php echo $value['Date'];?></td> </tr> <tr> <td colspan="2"><hr style="border: 1px dashed #ccc; width: 100%; height: 1px;" /></td> </tr> <?php } }else{ ?> <tr> <td style="text-align:center;height:80px;" colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td> </tr> <?php } ?> </table> </div> --><table class="youWrite"> <tr> <td>你也回答一下吧:</td> </tr> <tr> <td> <textarea rows="10" cols="80" id="answer" name="answer"></textarea> </td> </tr> <tr> <td class="submits"><a href="javascript:save_answer();"><img style="border:0;" src="/images/questionbutton.jpg"/></a></td> </tr> </table> </div> </center> </body> </html>
2.product_newmsg.php:
<meta http-equiv="Refresh" content="10"> <script language="javascript" type="text/javascript" src="/extend/js/json.js" ></script> <script language="javascript" type="text/javascript" src="/extend/menus.js"></script> <script language="javascript" type="text/javascript" src="/extend/js/jquery-1.4.2.js"></script> <link href="/css/main.css" rel="stylesheet" type="text/css" /> <link href="/css/question.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> //删除答案 function deleteanswer($id){ var $delete_answer_url = '<?php echo $delete_answer_url;?>'; var $post_data = { id : $id }; if(confirm("are you sure delete?")){ $.ajax({ type : 'post' , url : $delete_answer_url, data : $post_data , success : function( e ){ var $rs = JSON.decode( e ); if ( $rs.succ == 1 ){ alert("delete success!"); location.reload(); //刷新页面 } else { alert( $rs.msg ); } } }); } else{ return; }} </script> <div id="answerDiv" class="answerDiv"> <table id="answerTable"> <tr> <td class="answerHead" colspan="2"> 回答:</td> </tr> <!-- <tr>--> <!--<td><iframe width=0 height=0 src="check_new.php"></iframe></td>--> <!-- </tr>--> <?php if (isset($answers) && !empty($answers)) { foreach ($answers as $key=>$value){ ?> <tr> <td class="boss"><?php echo $value['Answer'];?></td> <td style="text-align:right;"> <?php if($_SESSION['ADMINISTRATOR']){//如果$_SESSION['ADMINISTRATOR']=0,即不是超级管理员,则不显示删除按钮 ?> <a href="javascript:deleteanswer(<?php echo $value['ID'];?>);"><img src="/images/questiondelete.jpg" style="border:0;"/></a> <?php } ?> </td> </tr> <tr> <td class="answerAuthor" colspan="2">回答者:<?php echo $value['Email'];?> 回答时间:<?php echo $value['Date'];?></td> </tr> <tr> <td colspan="2"><hr style="border: 1px dashed #ccc; width: 100%; height: 1px;" /></td> </tr> <?php } }else{ ?> <tr> <td style="text-align:center;height:80px;" colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td> </tr> <?php } ?> </table> </div>
这样就可以实现了。在浏览器中访问show.php就可以看到效果了。但是这个示例里面有很多东西操作了数据库。直接访问没什么效果。但是代码肯定是可以的。里面的原理和代码都是完整的。
好了。这里就介绍这两种方法。有这两种方法已经可以完成基本上所有的页面局部刷新了。
浅析PHP页面局部刷新功能的实现小结
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@