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

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

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

chat.html

<! DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//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 : #6666661pxsolid ; display : block ; margin-left : 5px ; margin-right : 5px ; height : 680px ; padding : 10px ; overflow-y : scroll ; }
.chat.usernamespan
{ 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();returnfalse;" >
< 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(
" Youhavenotenteredamessage! " );
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
+= ' <divclass="username">(<span> ' + userNode[ 0 ].firstChild.nodeValue + ' </span>)saidat<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
%
>
< ! -- #includefile = " 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(selecttop50*frommessageorderbyiddesc)asmessageorderbyid "
else
sql
= " select*frommessagewhereid> " & lastid & " orderbyid "
end if
rs.opensql,conn,
1 , 1
Response.Write(
" <?xmlversion=""1.0""encoding=""utf-8""?> " )
Response.Write(
" <book> " )
do while not rs.eof
Response.Write(
" <messageid="" " & 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 " % >
< ! -- #includefile = " conn.asp " -->
< %
dim username,mess
username
= Trim (Request.QueryString( " username " ))
mess
= Trim (Request.QueryString( " mess " ))
conn.execute(
" insertintomessage(messtext,username)values(' " & mess & " ',' " & username & " ') " )
call CloseConn()
%
>

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开发语言为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的聊天皮肤,有兴趣可以自己做皮肤,注意布局! 三、关于 您可以免费使用本程序,请保留代码中的注释信息,谢谢! 请勿利用本程序来实施任何违反法律的行为;否则,一切后果自负! 请保留作者版权信息,尽管不是什么大程序,但作者近期发现很多使用者连开发人都改成自己的名字,这既是对别人劳动成果的不尊重,也是一个人素质的体现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值