一个简单的Asp+ajax聊天室(二)

好了,今天接着把昨天未完成的聊天室完成它,lot's go

首先把完成的代码全贴出来:

chat.html

 

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html  xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta  http-equiv ="Content-Type"  content ="text/html; charset=utf-8"   />
< title > 无问的聊天室 </ title >
< script  type ="text/javascript"  src ="chat.js" ></ script >
< style  type ="text/css" >
<!--
.chat
{  border : #666666 1px solid ;  display : block ;  margin-left : 5px ;  margin-right : 5px ;  height : 680px ;  padding : 10px ;  overflow-y : scroll ; }
.chat .username span
{ font-style : italic ; }
.caht .messtext
{ font-size : 20px ;  background-color : #CC66FF ; margin-top : 15px ;  height : 30px ;  line-height : 30px ;  display : block ; }
-->
</ style >
</ head >

< body  onload ="startChat();" >
< H3 > 无的聊天室 </ H3 >
< div  id ="chat"  class ="chat" >
<!-- 这里显示聊天信息 -->
</ div >
< form  id ="frmSend"  name ="frmSend"  onsubmit ="sendMess();return false;" >
    
< input  name ="username"  type ="text"  id ="username"  value ="无问"  size ="10"   />
    
< input  name ="mess"  type ="text"  id ="mess"  size ="100"   />
    
< input  type ="submit"  value ="send"  id ="submitsend"  name ="submitsend"   />
</ form >
</ body >
</ html >

caht.js

 

var  lastID  =   "" ; // 声明上次取回的消息的ID
var  mGetTime; // 设置setTimeout的返回值
//
 通过封装getAjax()方法创建XMLHTTPRequest对象
function  getAjax()
{
    
var  ajax = false
    
try
        ajax 
=   new  ActiveXObject( " Msxml2.XMLHTTP " ); 
    }
catch (e){ 
        
try
            ajax 
=   new  ActiveXObject( " Microsoft.XMLHTTP " ); 
        }
catch (E){ 
            ajax 
=   false
        } 
    }
    
if ( ! ajax  &&   typeof  XMLHttpRequest != ' undefined ' ){ 
        ajax 
=   new  XMLHttpRequest(); 
    } 
    
return  ajax;
}

var  getMessReq  =  getAjax(); // 获取消息的XMLHTTPRequest对象
var  sendMessReq  =  getAjax(); // 发送消息的XMLHTTPRequest对象

// 发送消息的方法
function  sendMess()
{
    
// 如果消息为空给出提示并返回
     if (document.getElementById( " mess " ).value == "" ){
        alert(
" You have not entered a message! " );
        document.getElementById(
" mess " ).focus(); // 把焦点设置到消息输入框
         return ;
    }
    
// alert("");
     var  d  =   new  Date();
    
// 判断上次发送消息的状态,4:已发送,0:未发送
     if (sendMessReq.readyState == 4   ||  sendMessReq.readyState  ==   0 ){
        
// 发送消息的服务器端地址
         var  sendUrl  =   " send.asp?username= " + escape(document.getElementById( " username " ).value) + " &mess= " + escape(document.getElementById( " mess " ).value)  + " &d= " + d.getTime();
        sendMessReq.open(
" POST " ,sendUrl, true ); // 建立请求连接
        sendMessReq.onreadystatechange  =   function (){ // 发送状态改变后调用的方法
            clearTimeout(mGetTime); // 停止自动获取消息
            getMess(); // 获取消息
        }
        sendMessReq.send(
null ); // 发送请求
        document.getElementById( " mess " ).value  =   "" ; // 设置消息框为空
        document.getElementById( " mess " ).focus(); // 把焦点设置到消息输入框
    }
}


function  getMess()
{
    
var  d  =   new  Date();
    
if (getMessReq.readyState == 4   ||  getMessReq.readyState  ==   0 ){
        
var  getUrl  =   " getmess.asp?lastid= " + lastID  +   " &d= " + d.getTime(); // 从服务器返回消息的地址
        getMessReq.open( " POST " ,getUrl, true ); // 建立请求连接
        getMessReq.onreadystatechange  =   function (){
            
if (getMessReq.readyState == 4 && getMessReq.status == 200 ){
                
var  chatEL  =  document.getElementById( " chat " );
                
var  messXML  =  getMessReq.responseXML; // 获得返回后的XML
                 var  messNodes  =  messXML.getElementsByTagName( " message " );
                
var  messCount  =  messNodes.length;
                
for ( var  i  =   0  ; i  <  messCount ; i ++ ){
                    
var  userNode  =  messNodes[i].getElementsByTagName( " user " );
                    
var  textNode  =  messNodes[i].getElementsByTagName( " text " );
                    
var  dateNode  =  messNodes[i].getElementsByTagName( " date " );
                    chatEL.innerHTML 
+=   ' <div class="username">(<span> '   +  userNode[ 0 ].firstChild.nodeValue  +   ' </span>) said at <span> '   +  dateNode[ 0 ].firstChild.nodeValue  +   ' </span></div> ' ;
                    chatEL.innerHTML 
+=   ' <div> '   +  textNode[ 0 ].firstChild.nodeValue  +   ' </div> ' ;
                    lastID 
=  messNodes[i].getAttribute( " id " ); // 上次消息的ID
                    chatEL.scrollTop  =  chatEL.scrollHeight; // 滚动到最后一条消息
                }
                mGetTime 
=  setTimeout( " getMess() " , 2000 ); // 每隔两秒从服务返回最新消息
            }
        }
        getMessReq.send(
null );
    }
}

function  startChat()
{
    getMess();
    document.getElementById(
" mess " ).focus(); // 把焦点设置到消息输入框
}

getmess.asp

 

< %
Response.ContentType
= " application/xml "
Response.Charset
= " utf-8 "
Session.CodePage
= 65001
%
>
< ! -- #include file = " conn.asp " -->
< %
    
dim  rs
    
dim  sql
    
dim  lastid
    lastid 
=   Trim (Request.QueryString( " lastid " ))
    
set  rs  =  Server.CreateObject( " ADODB.Recordset " )
    
if  lastid  =   ""   or   isnull (lastid)  then
        sql 
=   " select * from (select top 50 * from message order by id desc) as message order by id "
    
else
        sql 
=   " select * from message where id >  " & lastid & "  order by id "
    
end   if
    rs.open sql,conn,
1 , 1
    Response.Write(
" <?xml version=""1.0"" encoding=""utf-8"" ?> " )
    Response.Write(
" <book> " )
    
do   while   not  rs.eof
    Response.Write(
" <message id="" " & rs( " id " ) & " ""> " )
    Response.Write(
" <user> " & rs( " username " ) & " </user> " )
    Response.Write(
" <text> " & rs( " messtext " ) & " </text> " )
    Response.Write(
" <date> " & rs( " date " ) & " </date> " )
    Response.Write(
" </message > " )
    rs.movenext
    
loop
    rs.close
    Response.Write(
" </book> " )
    
Set  rs  =   Nothing
    conn.close
    
set  conn  =   Nothing
%
>

 send.asp

 

< %@LANGUAGE = " VBSCRIPT "  CODEPAGE = " 65001 " % >
< ! -- #include file = " conn.asp " -->
< %
    
dim  username,mess
    username 
=   Trim (Request.QueryString( " username " ))
    mess 
=   Trim (Request.QueryString( " mess " ))
    conn.execute(
" insert into message(messtext,username) values(' " & mess & " ',' " & username & " ') " )
    
call  CloseConn()
%
>

 

好了,这个简单的聊天室的代码就全部完成了,不过呢,这只是最基本的部分,这里呢没有实现多聊天室、用户注册登陆等部分,有兴趣的朋友可把这部分再完善一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
开发语言为Asp,服务器脚本为VBScript; AJAX部分采用JQuery框架,功能代码均为原创;数据库暂时采用ACCESS; --------- 程序功能: 多人即时聊天;新信息声音提示;用户自主选择表情和颜色; 管理员删除信息/踢出用户;高强度管理密码; 数据库压缩; --------- 程序特色 特色?没什么特色!普通的ASP、普通的HTML、普通的JavaScript、还有一个普通的程序编写者; 唯有一点----本程序为原创,没有参考任何其他类似程序 --------- 默认管理员和密码都是admin 一、配置 用记事本打开inc文件夹下的conn.asp,注意如下代码 '聊天室配置 dim admins: admins="anlige,admin" '管理员用户,可自行配置,每个管理员以英文逗号(,)分割;无数量限制 dim pwd: pwd="43894a0e21232f297a57a5a743894a0e4a801fc3" '管理密码,所有管理员使用一个密码!本密码经MD5加密 dim adminToFront: adminToFront=false '管理员登录后是否同步显示到前台(注意,如果设置true,则登录后台的同时登录前台,前台无需再用另一账号),建议设置为false dim msgExpires: msgExpires=300 '信息过期时间,以分钟为单位,系统自动删除过期的信息 dim userExpires: userExpires=20 '用户过期时间,以分钟为单位,系统自动踢出20分钟不发言的用户 '结束配置 配置结束后保存! ____________________________________________________注意(关于密码)_____________________________________________________________________ 密码使用特殊MD5加密算法加密,如要修改密码请按如下方法修改: 假如你的聊天室地址为http://www.***.com/chat/ 访问http://www.***.com/chat/getmd5.asp?string=你要设置的密码,例如http://www.***.com/chat/getmd5.asp?string=admin 然后会显示一串字符串,上例的话会显示43894a0e21232f297a57a5a743894a0e4a801fc3 将inc/conn.asp代码中pwd的值修改为显示的字符串,保存!下次管理员登录就可以用admin这个作为密码登录,建议修改密码后移动getmd5.asp文件 _______________________________________________________________________________________________________________________________________ 、使用 聊天室默认地址为index.html,直接访问http://www.***.com/chat/index.html即可进入聊天室 具体使用方法请参考help.html 本程序皮肤使用的是QQ2008的聊天皮肤,有兴趣可以自己做皮肤,注意布局! 三、关于 您可以免费使用本程序,请保留代码中的注释信息,谢谢! 请勿利用本程序来实施任何违反法律的行为;否则,一切后果自负! 请保留作者版权信息,尽管不是什么大程序,但作者近期发现很多使用者连开发人都改成自己的名字,这既是对别人劳动成果的不尊重,也是一个人素质的体现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值