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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
深入解析PHP内存管理之谁动了我的内存
Jun 20 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
php项目开发中用到的快速排序算法分析
Jun 25 PHP
JavaScript实现删除电脑的关机键
Jul 26 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 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 发送带附件邮件示例
2014/01/23 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
jQuery中slideUp()方法用法分析
2014/12/24 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
vue项目环境变量配置的实现方法
2018/10/12 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
vue 组件简介
2020/07/31 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
python调用shell的方法
2013/11/20 Python
python Django批量导入数据
2016/03/25 Python
Django中的forms组件实例详解
2018/11/08 Python
Python饼状图的绘制实例
2019/01/15 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
公司的门卫岗位职责
2014/09/09 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫