浅析PHP页面局部刷新功能的实现小结
方法其实挺多的。以前比较常用的是iframe这样来做。现在多了个ajax,所以一般情况下都是用的ajax。
1.getTime.php:
<?php
header("cache-control:no-cache,must-revalidate");
header("Content-Type:text/html;charset=utf-8");
$time="2012-1-2018: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"happynewyear";
}
echo$showtime;
2.zidong.php:
</head>
<body>
<h1>Ajax动态显示时间</h1>
<inputtype="button"value="开始显示时间"id="go"onclick="start()"/>
<p>当前时间:<fontcolor="red"><spanid="showtime"></span></font></p>
</body>
<scripttype="text/javascript">
varxmlHttp;
functioncreateXMLHttpRequest(){
if(window.ActiveXObject){
xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
}
elseif(window.XMLHttpRequest){
xmlHttp=newXMLHttpRequest();
}
}
functionstart(){
createXMLHttpRequest();
varurl="getTime.php";
xmlHttp.open("GET",url,true);
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
functioncallback(){
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还是有点深的。
这种方法呢说起来复杂,其实还是挺简单的。说下原理吧:
要刷新的页面中把要自动刷新的局部的代码单独拿出来,做成一个独立的页面,自动刷新有很多种方法:可以在这个独立页面中用javascript来控制,什么setTimeout("start()",1000);啊或者setInterval("start()",1000);(每隔1秒刷新页面)这样,还可以用meta标签实现:<metahttp-equiv="Refresh"content="10">(每隔10秒刷新页面)。这样在原来的页面中用iframe来将它调用过来。这样就可以了。
还是上示例代码吧:
1.show.php:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<!--<metahttp-equiv="refresh"content="5">-->
<title>Admin</title>
<scriptlanguage="javascript"type="text/javascript"src="/extend/js/json.js"></script>
<scriptlanguage="javascript"type="text/javascript"src="/extend/menus.js"></script>
<scriptlanguage="javascript"type="text/javascript"src="/extend/js/jquery-1.4.2.js"></script>
<linkhref="/css/main.css"rel="stylesheet"type="text/css"/>
<linkhref="/css/question.css"rel="stylesheet"type="text/css"/>
<scripttype="text/javascript">
//下面的isKeyTrigger()、ctrlEnter()、submitContent()方法是响应键盘事件提交内容的。兼容性不错。
functionisKeyTrigger(e,keyCode){
varargv=isKeyTrigger.arguments;
varargc=isKeyTrigger.arguments.length;
varbCtrl=false;
if(argc>2){
bCtrl=argv[2];
}
varbAlt=false;
if(argc>3){
bAlt=argv[3];
}
varnav4=window.Event?true:false;
if(typeofe=="undefined"){
e=event;
}
if(bCtrl&&
!((typeofe.ctrlKey!="undefined")?
e.ctrlKey:e.modifiers&Event.CONTROL_MASK>0)){
returnfalse;
}
if(bAlt&&
!((typeofe.altKey!="undefined")?
e.altKey:e.modifiers&Event.ALT_MASK>0)){
returnfalse;
}
varwhichCode=0;
if(nav4)whichCode=e.which;
elseif(e.type=="keypress"||e.type=="keydown")
whichCode=e.keyCode;
elsewhichCode=e.button;
return(whichCode==keyCode);
}
functionctrlEnter(e){
varie=navigator.appName=="MicrosoftInternetExplorer"?true:false;
if(ie){
if(event.ctrlKey&&window.event.keyCode==13){
submitContent();
}
}else{
if(isKeyTrigger(e,13,true)){
submitContent();
}
}
}
functionsubmitContent(){
save_answer();
}
functionsave_answer(){
var$content=$("#answer").val();
var$save_answer_url="<?phpecho$save_answer_url;?>";
if($content==""){
alert("nodata!");
return;
}
var$post_data={
content:$content,
qid:"<?phpecho$question["ID"];?>",
uid:"<?phpecho$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("answersuccess!");
$("#answer").val("");
location.reload();//刷新页面
}else{
alert($rs.msg);
}
}
});
}
//删除答案
functiondeleteanswer($id){
var$delete_answer_url="<?phpecho$delete_answer_url;?>";
var$post_data={
id:$id
};
if(confirm("areyousuredelete?")){
$.ajax({
type:"post",
url:$delete_answer_url,
data:$post_data,
success:function(e){
var$rs=JSON.decode(e);
if($rs.succ==1){
alert("deletesuccess!");
location.reload();//刷新页面
}else{
alert($rs.msg);
}
}
});
}
else{
return;
}
}
////设置为最佳答案
//functionsetbestanswer($id,$aid){
// var$set_bestanswer_url="<?phpecho$set_bestanswer_url;?>";
// var$post_data={
// id:$id,
// aid:$aid
// };
// if(confirm("areyousuresetthisanswerisbest?")){
// $.ajax({
// type:"post",
// url:$set_bestanswer_url,
// data:$post_data,
// success:function(e){
// var$rs=JSON.decode(e);
// if($rs.succ==1){
// alert("setsuccess!");
// location.reload();//刷新页面
// }else{
// alert($rs.msg);
// }
// }
// });
// }
// else{
// return;
// }
//
//}
</script>
<!--<scriptlanguage="javascript">-->
<!--setInterval("myajax();",1000);-->
<!--functionmyajax()-->
<!--{-->
<!-- //获取信息json数组-->
<!-- varhtml2="";-->
<!-- html2="<tableid=\"answerTable\"><tr><tdclass=\"answerHead\"colspan=\"2\">回答:"+-->
<!-- "</td></tr><tr><td><iframewidth=0height=0src=\"check_new.php\"></iframe></td></tr>"+-->
<!-- "<?phpif(isset($answers)&&!empty($answers)){foreach($answersas$key=>$value){?>"+-->
<!-- "<tr><tdclass=\"boss\">"+-->
<!-- "<?phpecho$value["Answer"];?>"+-->
<!-- "</td><tdstyle=\"text-align:right;\">"+-->
<!-- "<?phpif($_SESSION["ADMINISTRATOR"]){?>"+-->
<!-- "<ahref=\"javascript:deleteanswer(<?phpecho$value["ID"];?>);\">"+-->
<!-- "<imgsrc=\"/images/questiondelete.jpg\" style=\"border:0;\"/></a>"+-->
<!-- "<?php }?>"+-->
<!-- "</td></tr><tr><tdclass=\"answerAuthor\"colspan=\"2\">回答者:"+-->
<!-- "<?phpecho$value["Email"];?>"+-->
<!-- " 回答时间:"+-->
<!-- "<?phpecho$value["Date"];?>"+-->
<!-- "</td></tr><tr><tdcolspan=\"2\"><hrstyle=\"border:1pxdashed#ccc;width:100%;height:1px;\"/></td></tr>"+-->
<!-- "<?php}}else{?>"+-->
<!-- "<tr><tdstyle=\"text-align:center;height:80px;\"colspan=\"2\">该问题目前还没有用户回答,你可以在下面填写内容来回答</td></tr>"+-->
<!-- "<?php}?> </table>";-->
<!-- $("#answerDiv").html(html2);-->
<!--}-->
<!--</script>-->
<!--<scripttype="text/javascript">-->
<!--varxmlHttp;-->
<!--functioncreateXMLHttpRequest(){-->
<!--if(window.ActiveXObject){-->
<!-- xmlHttp=newActiveXObject("Microsoft.XMLHTTP");-->
<!--}-->
<!--elseif(window.XMLHttpRequest){-->
<!-- xmlHttp=newXMLHttpRequest();-->
<!--}-->
<!--}-->
<!--functionstart(){-->
<!--//alert("laslfda;f");-->
<!--createXMLHttpRequest();-->
<!--varurl="/extend/check_new.php?sid="+Math.random()";-->
<!--//varurl="../../view/product/check_new.php";-->
<!--//alert(url);-->
<!--xmlHttp.open("GET",url,true);-->
<!--//alert(url);-->
<!--xmlHttp.onreadystatechange=callback;-->
<!--xmlHttp.send(null);-->
<!--}-->
<!--functioncallback(){-->
<!--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>
<bodyonkeydown="javascript:ctrlEnter(event);">
<center>
<divclass="Container">
<table>
<tr>
<thclass="zongHead"colspan="2"> 产品问题及回答详细列表</th>
</tr>
<tr>
<tdcolspan="2"><hr/></td>
</tr>
<tr>
<tdclass="questionHead"colspan="2">该问题详细内容:</td>
</tr>
<?php
if(isset($question)&&!empty($question)){
?>
<tr>
<tdclass="questionContent"colspan="2"><?phpecho$question["Question"];?></td>
</tr>
<tr>
<tdclass="author"colspan="2">提问者:<?phpecho$questionUser["Email"];?> 提问时间:<?phpecho$question["Date"];?></td>
</tr>
<?php
}
?>
<tr>
<tdcolspan="2"><hr/></td>
</tr>
</table>
<iframesrc="<?phpechoget_url(array("m"=>"product","a"=>"product_newmsg","qid"=>$qid));?>"scrolling="no"frameborder="0"width="999px"onload="this.height=this.contentWindow.document.documentElement.scrollHeight"></iframe>
<!--<divid="answerDiv"class="answerDiv">
<tableid="answerTable">
<tr>
<tdclass="answerHead"colspan="2">回答:</td>
</tr>
<tr>
<td><iframewidth=0height=0src="check_new.php"></iframe></td>
</tr>
<?php
if(isset($answers)&&!empty($answers)){
foreach($answersas$key=>$value){
?>
<tr>
<tdclass="boss"><?phpecho$value["Answer"];?></td>
<tdstyle="text-align:right;">
<?php
if($_SESSION["ADMINISTRATOR"]){//如果$_SESSION["ADMINISTRATOR"]=0,即不是超级管理员,则不显示删除按钮
?>
<ahref="javascript:deleteanswer(<?phpecho$value["ID"];?>);"><imgsrc="/images/questiondelete.jpg" style="border:0;"/></a>
<?php
}
?>
</td>
</tr>
<tr>
<tdclass="answerAuthor"colspan="2">回答者:<?phpecho$value["Email"];?> 回答时间:<?phpecho$value["Date"];?></td>
</tr>
<tr>
<tdcolspan="2"><hrstyle="border:1pxdashed#ccc;width:100%;height:1px;"/></td>
</tr>
<?php
}
}else{
?>
<tr>
<tdstyle="text-align:center;height:80px;"colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td>
</tr>
<?php
}
?>
</table>
</div>
--><tableclass="youWrite">
<tr>
<td>你也回答一下吧:</td>
</tr>
<tr>
<td>
<textarearows="10"cols="80"id="answer"name="answer"></textarea>
</td>
</tr>
<tr>
<tdclass="submits"><ahref="javascript:save_answer();"><imgstyle="border:0;"src="/images/questionbutton.jpg"/></a></td>
</tr>
</table>
</div>
</center>
</body>
</html>
2.product_newmsg.php:
<metahttp-equiv="Refresh"content="10">
<scriptlanguage="javascript"type="text/javascript"src="/extend/js/json.js"></script>
<scriptlanguage="javascript"type="text/javascript"src="/extend/menus.js"></script>
<scriptlanguage="javascript"type="text/javascript"src="/extend/js/jquery-1.4.2.js"></script>
<linkhref="/css/main.css"rel="stylesheet"type="text/css"/>
<linkhref="/css/question.css"rel="stylesheet"type="text/css"/>
<scripttype="text/javascript">
//删除答案
functiondeleteanswer($id){
var$delete_answer_url="<?phpecho$delete_answer_url;?>";
var$post_data={
id:$id
};
if(confirm("areyousuredelete?")){
$.ajax({
type:"post",
url:$delete_answer_url,
data:$post_data,
success:function(e){
var$rs=JSON.decode(e);
if($rs.succ==1){
alert("deletesuccess!");
location.reload();//刷新页面
}else{
alert($rs.msg);
}
}
});
}
else{
return;
}
}
</script>
<divid="answerDiv"class="answerDiv">
<tableid="answerTable">
<tr>
<tdclass="answerHead"colspan="2"> 回答:</td>
</tr>
<!-- <tr>-->
<!--<td><iframewidth=0height=0src="check_new.php"></iframe></td>-->
<!-- </tr>-->
<?php
if(isset($answers)&&!empty($answers)){
foreach($answersas$key=>$value){
?>
<tr>
<tdclass="boss"><?phpecho$value["Answer"];?></td>
<tdstyle="text-align:right;">
<?php
if($_SESSION["ADMINISTRATOR"]){//如果$_SESSION["ADMINISTRATOR"]=0,即不是超级管理员,则不显示删除按钮
?>
<ahref="javascript:deleteanswer(<?phpecho$value["ID"];?>);"><imgsrc="/images/questiondelete.jpg" style="border:0;"/></a>
<?php
}
?>
</td>
</tr>
<tr>
<tdclass="answerAuthor"colspan="2">回答者:<?phpecho$value["Email"];?> 回答时间:<?phpecho$value["Date"];?></td>
</tr>
<tr>
<tdcolspan="2"><hrstyle="border:1pxdashed#ccc;width:100%;height:1px;"/></td>
</tr>
<?php
}
}else{
?>
<tr>
<tdstyle="text-align:center;height:80px;"colspan="2">该问题目前还没有用户回答,你可以在下面填写内容来回答</td>
</tr>
<?php
}
?>
</table>
</div>
这样就可以实现了。在浏览器中访问show.php就可以看到效果了。但是这个示例里面有很多东西操作了数据库。直接访问没什么效果。但是代码肯定是可以的。里面的原理和代码都是完整的。
好了。这里就介绍这两种方法。有这两种方法已经可以完成基本上所有的页面局部刷新了。
相关文章
- PHP时区设置相差8小时间程序与php.ini配置方法
- php二维码分享到朋友圈,php实现的微信分享到朋友圈并记录分享次数功能
- 微信授权网页扫码登录php,PHP实现微信开放平台扫码登录源码
- php安装向导中判断是否安装的实现思路
- 用PHP实现URL转换短网址的算法
- 展现魅力:PHP支持MySQL扩展(php支持mysql扩展)
- MySQL 锁表与 PHP 数据交互实现(mysql锁表php)
- 快速访问MSSQL数据库:PHP实现(php访问mssql)
- PHP操作MySQL数据库实现排名(mysql排名php)
- PHP实现Redis监控的简便方法(php监控redis)
- 高效实现消息处理: Redis队列与PHP的并发技巧(redis队列并发php)
- PHP与Redis配合,实现秒杀抢购(redisphp秒杀)
- PHP连接Oracle:轻松实现数据库交互(php链接oracle)
- MySQL和PHP解决乱码问题(mysql php 乱码)
- PHP实现MSSQL数据库分页功能(php分页类 mssql)
- PHP如何正确配置MongoDB数据库连接?(php配置mongodb)
- 简单示例AJAX结合PHP代码实现登录效果代码
- php新建文件自动编号的思路与实现
- PHP获取MySQL数据库里所有表的实现代码
- PHP版汉字转码的实现详解
- PHP根据IP地址获取所在城市具体实现
- php实现图片缩放功能类
- php多文件上传实现代码
- PHP实现微信公众平台音乐点播
- php+ajax实现图片文件上传功能实例