+ -
当前位置:首页 → 问答吧 → 用jquery写了一个超简陋的ajax无刷新聊天室

用jquery写了一个超简陋的ajax无刷新聊天室

时间:2008-05-30

来源:互联网

现要只是实现了聊天室的基本聊天,ajax无刷新显示功能,会员功能 等正在制作中。
演示地址:http://www.ye55.com/chat

下载地址:http://www.phpd.cn/show-34-1.html

sql:
CREATE TABLE `message` (
  `mid` int(20) NOT NULL auto_increment,
  `msg` varchar(255) NOT NULL,
  `user` varchar(50) NOT NULL,
  `time` int(10) NOT NULL,
  PRIMARY KEY  (`mid`),
  KEY `user` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=161 ;

CREATE TABLE `session` (
  `id` varchar(32) NOT NULL,
  `time` int(10) NOT NULL,
  `timenow` int(10) NOT NULL,
  `data` text NOT NULL,
  `ip` varchar(15) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



主要的三个页面的代码
index.php
复制PHP内容到剪贴板
PHP代码:

<?php
//程序设计:℃冻番茄 QQ:7279915 E-mail:[email protected] [url=http://www.phpd.cn]www.phpd.cn[/url]
require_once("config.php");
?>
<!DOCTYPE htm PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "[url=http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd]http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd[/url]">
<html xmlns="[url=http://www.w3.org/1999/xhtml]http://www.w3.org/1999/xhtml[/url]">
 <HEAD>
  <TITLE> chat </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="">
  <META NAME="Keywords" CONTENT="">
  <META NAME="Description" CONTENT="">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href="css/global.css" rel="stylesheet" type="text/css" />
  <SCRIPT LANGUAGE="JavaScript" src="js/jquery.js"></SCRIPT>
 </HEAD>
 <BODY>
 <div id="main">
 <div id="main_left" style="float:none;margin:0px auto;">
  <div id="chat_m" style="width:500px;height:500px;border:#cccccc 1px solid;overflow:auto;">Loading...</div>
   <div id="main_l_from">
   <FORM METHOD=POST ACTION="javascript:void(0)">
   昵称:<INPUT TYPE="text" NAME="user" id="user" size="8" value="<?=$_SESSION['user']?>"> 内容:
   <INPUT TYPE="text" NAME="message" id="message" style="width:250px;"> <INPUT TYPE="submit" name="sub" value="发言" id="sub">
   </div></FORM>
 </div>
 <!--<div id="main_right">
 <h2>在线会员</h2>
 </div>-->
<SCRIPT LANGUAGE="JavaScript">
<!--
 $("#chat_m").load("chat.php");
 $("#sub").click(function(){
  if($("#user").val()==''){
   alert("昵称不能为空!");
  }else if($("#message").val()==''){
   alert("聊天内容不能为空!");
  }else{
    $.post("ajax.php?act=send",{user:$("#user").val(),msg:$("#message").val()},function(data){
     if(data.msg===true){
      showmsg();
      $("#message").val("");
     }else{
      alert(data.msg); 
     }
    },"json")
   }
 })
//-->
</SCRIPT>
<hr size=1>
<center>程序设计:℃冻番茄 QQ:7279915 E-mail:[email protected] <a href="[url=http://www.phpd.cn]http://www.phpd.cn">[url]www.phpd.cn[/url]</a[/url]> </center>
chat.php
复制PHP内容到剪贴板
PHP代码:

<?php
require_once("config.php");
//程序设计:℃冻番茄 QQ:7279915 E-mail:[email protected] [url=http://www.phpd.cn]www.phpd.cn[/url]
$fist=$db->getfirst("select `mid` from `message` order by `mid` desc ");
$mid=$fist['mid']-40; //初始化聊天记录条数
$mid=$mid<=0?0:$mid;
$mid=0;
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <div id="contents"></div>
 <INPUT TYPE="text" style="display:none" NAME="mid" id="hide_mid" value="<?=$mid?>">
  <div id="end" style="width:400px;display:none;clear:both;"></div>
  <SCRIPT LANGUAGE="JavaScript">
  <!--
  //alert($("#hide_mid").val());
  function showmsg(){
   mids=$("#hide_mid").val();
   
   $.post("ajax.php?act=display",
       {mid:mids},
       function(data){
    //alert(data.list[2].user);
      $("#hide_mid").val(data.mid);
      if(data.list!=0){
       for(i=0;i<data.list.length;i++){
        $("#contents").append("<br />"+data.list[i].user+"说: "+data.list[i].msg+"&nbsp;&nbsp;&nbsp;&nbsp;["+data.list[i].time1+"]");
        scrollWindow();
       }
      }
       },"json");
   }
  function scrollWindow() {scroll(0, 100000); } 
   showmsg();
   setInterval("showmsg()", 4000); 
  //-->
  </SCRIPT>
ajax.php
复制PHP内容到剪贴板
PHP代码:

<?php
require_once("config.php");
////程序设计:℃冻番茄 QQ:7279915 E-mail:[email protected] [url=http://www.phpd.cn]www.phpd.cn[/url]
//发信息
if($_GET['act']=='send'){
 $msg=$_POST['msg'];
 $user=$_POST['user'];
 if(empty($msg) || empty($user)){
  $return['msg']='聊天内容或昵称不能为空';
 }else{
  $time=time();
  if($db->insert("insert into `message` (`msg`,`user`,`time`) values ('$msg','$user','$time')")){
   $return['msg']=true;
  }else{
   $return['msg']="err";
  }
 }
 echo json_encode($return);
}elseif($_GET['act']=='display'){
 if(isset($_POST['mid'])){
  $s=" where `mid`>'".$_POST['mid']."' ";
 }else{
  $s='';
 }
 $sql="select * from `message` $s order by `mid`";
 $total=$db->getcount($sql);
 if($total==0){
  $a=0;
 }else{
  $result=$db->query($sql);
  while($row=$db->getarray($result)){
   $row['time1']=date('Y-m-d H:i:s',$row['time']);
   $a[]=$row;
   $b=$row['mid'];
  }
 }
 $ccc=array('list'=>$a,'mid'=>$b);
 echo json_encode($ccc);
}
?>

作者: dmkf   发布时间: 2008-05-30

鼓励一下。

作者: luzhou   发布时间: 2008-05-30

正好在研究,看看.

作者: zhuweibao   发布时间: 2008-05-30

刚解决了个div滚动条自己下翻的问题

作者: dmkf   发布时间: 2008-05-30

还不错

作者: dzjzmj   发布时间: 2008-05-30

firefox下貌似不行咯

作者: elove   发布时间: 2008-05-31

错,是可以。不过我提交了一次。咋出现那么多呢

作者: elove   发布时间: 2008-05-31

我怎么放在本地调试,首页什么都没有呢

作者: lshfong   发布时间: 2008-06-03

引用:
原帖由 lshfong 于 2008-6-3 15:08 发表
我怎么放在本地调试,首页什么都没有呢
嘿嘿。。。昨天不是解决了这问题么。。

作者: dmkf   发布时间: 2008-06-04

不错阿

作者: 小小魔刀   发布时间: 2008-06-04

能在一台机子上 开多个页面 及时聊?

作者: lenco   发布时间: 2008-06-04

不要使用 MYSQL 做聊天室的话.请求太频繁了。速度太慢.

如果使用 PHP 来做聊天室的话. 建议用MEMCACHED 来记录聊天信息.

作者: szy_session1987   发布时间: 2008-06-06

MEMCACHED是内存杀手,一般的聊天室怕是用不起哈

作者: lshfong   发布时间: 2008-06-06

对于聊天室mem真是非常有用武之地

作者: 月黑风高   发布时间: 2008-06-12

学习学习

作者: paciwater   发布时间: 2008-06-13

好东西,谢谢分享

作者: 非常电电   发布时间: 2008-06-14

热门下载

更多