PHP Ajax实现页面无刷新发表评论


Posted in PHP onJanuary 02, 2007

大家都有在网站发表评论的经历,传统的发表过程无非是:发表->提交页面表单->等待刷新页面,这样在网络比较拥挤的时候,往往需要漫长的等待,今天介绍用PHP+Ajax实现页面无刷新发表评论,希望对初学ajax的PHPer有所帮助。

   那么首先,我们需要一个基本的ajax开发框架,文件ajax.js就包含了这个框架,代码如下:

var http_request=false;
  function send_request(url){//初始化,指定处理函数,发送请求的函数
    http_request=false;
 //开始初始化XMLHttpRequest对象
 if(window.XMLHttpRequest){//Mozilla
浏览器
  http_request=new XMLHttpRequest();
  if(http_request.overrideMimeType){//设置MIME类别
    http_request.overrideMimeType("text/xml");
  }
 }
 else if(window.ActiveXObject){//IE浏览器
  try{
   http_request=new ActiveXObject("Msxml2.XMLHttp");
  }catch(e){
   try{
   http_request=new ActiveXobject("Microsoft.XMLHttp");
   }catch(e){}
  }
    }
 if(!http_request){//异常,创建对象实例失败
  window.alert("创建XMLHttp对象失败!");
  return false;
 }
 http_request.onreadystatechange=processrequest;
 //确定发送请求方式,URL,及是否同步执行下段代码
    http_request.open("GET",url,true);
 http_request.send(null);
  }
  //处理返回信息的函数
   function processrequest(){
   if(http_request.readyState==4){//判断对象状态
     if(http_request.status==200){//信息已成功返回,开始处理信息
   document.getElementById(reobj).innerHTML=http_request.responseText;
  }
  else{//页面不正常
   alert("您所请求的页面不正常!");
  }
   }
  }
   function checkfourm(obj){
    var f=document.fourm;
    var newfourm=f.newfourm.value;
    var username=f.username.value;
    var id=f.id.value;
    if(username==""){
           document.getElementById(obj).innerHTML="<img src=images/false.gif> <font color=red>您必须先登录!</font>";
     return false;
    }
    else if(newfourm==""){
     document.getElementById(obj).innerHTML="<img src=images/false.gif> <font color=red>您还没填写评论内容!</font>";
     return false;
    }
    else{
     document.getElementById(obj).innerHTML="正在发送数据...";
     send_request('sendnewfourm.php?username='+username+'&newfourm='+newfourm+'&id='+id);
     reobj=obj;
    }
   }

   有一点ajax基础的通过注释,应该都可以看懂这段代码,我们可以看出,当我们开始发表评论的时候,在一个特定位置先显示:正在发送数据...。接着调用回调函数处理数据。那么请看服务器端的代码:

<?php
  header('Content-Type:text/html;charset=GB2312');//避免输出中文乱码,linux下不需要
  $username=trim($_GET['username']);
  $newfourm=trim($_GET['newfourm']);
  $id=$_GET['id'];
  $time=date("Y-m-d");

  include('inc/config.inc.php');
  include('inc/dbclass.php');
  $db=new db;//从数据库操作类生成实例
  $db->mysql($dbhost,$dbuser,$dbpassword,$dbname);//调用连接参数
函数
  $db->createcon();//调用创建连接函数

  $addsql="insert into cr_fourm values(0,'$newfourm','$username','$time',$id)";
  $db->query($addsql);
  echo"<img src=images/pass.gif> <font color=red>评论已成功发表!</font>";
  //echo $addsql;
  $db->close();//关闭数据库连接
?>

   由于jsvascript采用UTF8编码,在windows下采用ajax回送服务器的返回信息就会出现乱码,因此在win下应用开头第一句是非常必要的。中间那段两个包含文件是数据库操作类和数据库配置信息,我个人习惯将基本的数据库操作写成一个类,方便调用。到这里相信大家已经基本明白这个程序的工作原理了,在给出页面的HTML代码:

<table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="center"><?php echo $rows_p[p_info];?></td>
      </tr>
      <tr>
        <td align="center"><br><br><iframe frameborder="0" scrolling="auto" src="showfourm.php?picid=<?=$id;?>" style=HEIGHT:250px;VISIBILITY:inherit;WIDTH:98%;Z-INDEX:2 ></iframe>
</td>
      </tr>
      <tr>
        <td align="center"><br><br>
  <div align="center" id="result"></div>
  <form name="fourm">
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td height="25"> 快速发表评论<span class="STYLE1">(必须先登陆)用户名:
                <input name="username" type="text" value="<?=$username?>" readonly>
            </span></td>
          </tr>
          <tr>
            <td height="32" align="center" valign="middle"><textarea name="newfourm" class="f" id="newfourm"></textarea></td>
          </tr>
          <tr>
            <td height="32"> <input name="submit" type="button" value="发表评论" onClick="checkfourm('result')">
              <input name="reset" type="reset" id="reset" value="重新填写">
            <input name="id" type="hidden" id="id" value="<?php echo"$id";?>"></td>
          </tr>
        </table>
        </form>
        </td>
      </tr>
    </table>

   这是我网页的一部分,也就是实现这一功能的框架代码,显示评论页面用IFRAME(隐藏帧)调用,待信息发送完之后,只刷新IFRAME那一块就可以看到自己发的评论,从发送到查看,整个过程都不需要刷新整个页面。好了,最后看看效果图吧!^_^

   1.点击“提交”,开始发送数据

PHP Ajax实现页面无刷新发表评论

2. 数据发送成功

PHP Ajax实现页面无刷新发表评论

3. 刷新评论列表

PHP Ajax实现页面无刷新发表评论

 

PHP 相关文章推荐
php 删除cookie和浏览器重定向
Mar 16 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
php支付宝接口用法分析
Jan 04 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
php文件上传你必须知道的几点
Oct 20 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
Dec 19 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
PHP数组编码gbk与utf8互相转换的两种方法
Sep 01 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
Yii2处理密码加密及验证的方法
May 12 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 #PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 #PHP
默默小谈PHP&amp;MYSQL分页原理及实现
Jan 02 #PHP
默默简单的写了一个模板引擎
Jan 02 #PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 #PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 #PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 #PHP
You might like
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
关于php开启错误提示的总结
2019/09/24 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
python3正则模块re的使用方法详解
2020/02/11 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
学校三八妇女节活动情况总结
2014/03/09 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
会计专业自荐信范文
2015/03/05 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python