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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
php网页后退不再出现过期
Mar 08 PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 PHP
php获取本地图片文件并生成xml文件输出具体思路
Apr 27 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
详解PHP中的PDO类
Jul 06 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
关于php中一些字符串总结
May 05 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php微信开发之关注事件
Jun 14 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
PHP输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
PHP可变函数的使用详解
2013/06/14 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
关于extjs treepanel复选框选中父节点与子节点的问题
2013/04/02 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
利用jquery获取select下拉框的值
2016/11/23 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
python实现输入数字的连续加减方法
2018/06/22 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
关于读书的演讲稿
2014/05/07 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
学校群众路线专项整治方案
2014/10/31 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
python开发制作好看的时钟效果
2022/05/02 Python