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

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

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

chat.html

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>无问的聊天室</title>
<scripttype="text/javascript"src="chat.js"></script>
<styletype="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>

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

caht.js

varlastID="";//声明上次取回的消息的ID
varmGetTime;//设置setTimeout的返回值
//
通过封装getAjax()方法创建XMLHTTPRequest对象
functiongetAjax()
{
varajax=false;
try{
ajax
=newActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try{
ajax
=newActiveXObject("Microsoft.XMLHTTP");
}
catch(E){
ajax
=false;
}
}
if(!ajax&&typeofXMLHttpRequest!='undefined'){
ajax
=newXMLHttpRequest();
}
returnajax;
}

vargetMessReq=getAjax();//获取消息的XMLHTTPRequest对象
varsendMessReq=getAjax();//发送消息的XMLHTTPRequest对象

//发送消息的方法
functionsendMess()
{
//如果消息为空给出提示并返回
if(document.getElementById("mess").value==""){
alert(
"Youhavenotenteredamessage!");
document.getElementById(
"mess").focus();//把焦点设置到消息输入框
return;
}
//alert("");
vard=newDate();
//判断上次发送消息的状态,4:已发送,0:未发送
if(sendMessReq.readyState==4||sendMessReq.readyState==0){
//发送消息的服务器端地址
varsendUrl="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();//把焦点设置到消息输入框
}
}


functiongetMess()
{
vard=newDate();
if(getMessReq.readyState==4||getMessReq.readyState==0){
vargetUrl="getmess.asp?lastid="+lastID+"&d="+d.getTime();//从服务器返回消息的地址
getMessReq.open("POST",getUrl,true);//建立请求连接
getMessReq.onreadystatechange=function(){
if(getMessReq.readyState==4&&getMessReq.status==200){
varchatEL=document.getElementById("chat");
varmessXML=getMessReq.responseXML;//获得返回后的XML
varmessNodes=messXML.getElementsByTagName("message");
varmessCount=messNodes.length;
for(vari=0;i<messCount;i++){
varuserNode=messNodes[i].getElementsByTagName("user");
vartextNode=messNodes[i].getElementsByTagName("text");
vardateNode=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);
}
}

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

getmess.asp

<%
Response.ContentType
="application/xml"
Response.Charset
="utf-8"
Session.CodePage
=65001
%
>
<!--#includefile="conn.asp"-->
<%
dimrs
dimsql
dimlastid
lastid
=Trim(Request.QueryString("lastid"))
setrs=Server.CreateObject("ADODB.Recordset")
iflastid=""orisnull(lastid)then
sql
="select*from(selecttop50*frommessageorderbyiddesc)asmessageorderbyid"
else
sql
="select*frommessagewhereid>"&lastid&"orderbyid"
endif
rs.opensql,conn,
1,1
Response.Write(
"<?xmlversion=""1.0""encoding=""utf-8""?>")
Response.Write(
"<book>")
dowhilenotrs.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>")
Setrs=Nothing
conn.close
setconn=Nothing
%
>

send.asp

<%@LANGUAGE="VBSCRIPT"CODEPAGE="65001"%>
<!--#includefile="conn.asp"-->
<%
dimusername,mess
username
=Trim(Request.QueryString("username"))
mess
=Trim(Request.QueryString("mess"))
conn.execute(
"insertintomessage(messtext,username)values('"&mess&"','"&username&"')")
callCloseConn()
%
>

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

开发语言为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、付费专栏及课程。

余额充值