Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网站建设 > PHP > ajax聊天室源码
【标  题】:ajax聊天室源码
【关键字】:ajax
【来  源】:http://blog.csdn.net/lqscoke/archive/2007/01/10/1479050.aspx

ajax聊天室源码

Your Ad Here

前些天做了一个聊天室,基于XmlHttpRequest对象,使聊天不会刷新。用XmlDocument对象来保存聊天信息, 并保存至Application对象里面。客户端用Dom来解析聊天信息。Application对象还保存所有用户的所有聊天信息数量,在Session对象里面保存每个会话的聊天数量,每次会话判断Session和Application两个对象中的聊天数量之差X,并从Application中取出后面几条(X),并返回给客户端。


这是聊天的js文件

 

//创建通用的xmlRequest对象
function CreateXmlRequest(){   
    
var xmlhttp_request = false;    
    
try{     
            
if( window.ActiveXObject ){          
              
forvar i = 5; i; i-- ){             
                 
try{                  
                     
if( i == 2 ){
                        xmlhttp_request 
= new ActiveXObject( 

"Microsoft.XMLHTTP" );                       
                     }

                     
else{
                        xmlhttp_request 
= new ActiveXObject( 

"Msxml2.XMLHTTP." + i + ".0" );    
                        

xmlhttp_request.setRequestHeader(
"Content-Type","text/xml");
                        

xmlhttp_request.setRequestHeader(
"Content-Type","gb2312");               

 
                     }

                        
break;
                 }
               
                 
catch(e){  
                           xmlhttp_request 
= false;              
                 }
          
              }
       
            }

            
else if( window.XMLHttpRequest ){           
                      xmlhttp_request 
= new XMLHttpRequest();           
                       
if (xmlhttp_request.overrideMimeType) {           

    
                            

xmlhttp_request.overrideMimeType(
'text/xml');            
                       }
       
                  }
   
    }

                   
catch(e)
                   
{        
                        xmlhttp_request 
= false;   
                   }

           
return xmlhttp_request ;
}




var enterRoom=true;//标记用户是否第一次(刚刚)进入聊天室
var isLoadingMsg=true;//标记是否已经加载聊天信息
var myrequest=false;
//获取聊天信息
function getChatMessage(){
    isLoadingMsg
=false;
    myrequest
=CreateXmlRequest();
    
    xmlDom
=new ActiveXObject("Microsoft.XMLDOM");//获取DOM对象
    xmlDom.async=false;//在HTML读取前加载
    myrequest.onreadystatechange=showChatMessage;
    xmlDomStr
="<control>";
    xmlDomStr
=xmlDomStr+"<enter>"+enterRoom+"</enter>";
    xmlDomStr
=xmlDomStr+"</control>";
    xmlDom.loadXML(xmlDomStr);
    enterRoom
=false;
    myrequest.open(
"POST","getXMLMessage.aspx?myDate="+new 

Date().getTime(),
true);
    myrequest.send(xmlDom);

}


//显示聊天信息
function showChatMessage(){

    
if(myrequest.readyState==4 ){  
        
if(myrequest.status==200)
            isLoadingMsg
=true;
            
var myDom=myrequest.responseText;//获取返回XML数据
            msgDom=new ActiveXObject("Microsoft.XMLDOM");
            
var msgDom=myrequest.responseXML;
            msgDom.loadXML(myDom);
        
var strMessage="";
            
//(msgDom!=null)&&
            if(myDom!=""){
                
var 

messageNodes
=msgDom.getElementsByTagName("message"); //获取所有message的结点
var chatmsgs=document.getElementById("ChatMessages");
orgMsg
=chatmsgs.innerHTML;//获取原来的聊天信息
    for(i=0;i<messageNodes.length;i++){
                        msgNode
=messageNodes(i);//获取message的结点
    //获取message结点下的元素
                     objText=msgNode.selectSingleNode("text").text;
    objText
=Check(objText);
                     objUser
=msgNode.selectSingleNode("user").text;
    objfont
=msgNode.selectSingleNode("fontface").text;
                     objsize
=msgNode.selectSingleNode("fontsize").text;
    objColor
=msgNode.selectSingleNode("color").text;
    strMessage
=strMessage+"<font face="+objfont+" size="+objsize+" 
color=
"+objColor+"><B>"+objUser+"</B>:"+objText+"</font><br>";
                }

                
                
if(strMessage!=""){
                    strMessage
=orgMsg+strMessage;
                    

document.getElementById(
"ChatMessages").innerHTML=strMessage;//累加
                }

                
//chatmsgs.scrollIntoView(false);//窗口滚动为false;
            }

        }

    }

}


//更新消息
function updatechatMessage(){
    
    
var chatmsg=document.getElementById("chatmsg");
    
var checkedValue=chatmsg.value;
    
var username=document.getElementById("username").value;
    
if(checkedValue==""){
        errorToolTip(
"chatmsg","内容");
        
return;
    }

    
if(username==""){
        errorToolTip(
"username","用户名");
        
return;
    }

    
var color=document.getElementById("msgcolor").value;
    
var fontsize=document.getElementById("chatFontSize").value;
    
var fontface=document.getElementById("chatFont").value;
    
if(chatmsg.value!=""){
        
var strMessage=checkedValue;
        sendrequest
=CreateXmlRequest();
        xmlDom
=new ActiveXObject("Microsoft.XMLDOM");//获取DOM对象
        xmlDom.async=false;
        xmlDomStr
="<message>";
        xmlDomStr
=xmlDomStr+"<text>"+strMessage+"</text>";//获取发送的消息
        xmlDomStr=xmlDomStr+"<user>"+username+"</user>";//用户名
        xmlDomStr=xmlDomStr+"<fontsize>"+fontsize+"</fontsize>";
        xmlDomStr
=xmlDomStr+"<fontface>"+fontface+"</fontface>";
        xmlDomStr
=xmlDomStr+"<color>"+color+"</color>";
        xmlDomStr
=xmlDomStr+"</message>";
        xmlDom.loadXML(xmlDomStr);
        sendrequest.onreadystatechange
=getCountMsg;
        sendrequest.open(
"POST","updateXMLMessage.aspx",true);
        sendrequest.send(xmlDom);
        chatmsg.value
="";//清空输入框        
    }

}



//获取消息数量
function getCountMsg(){
    
if(sendrequest.readyState==4 )
        
if(sendrequest.status==200){
            

//document.getElementById("countMsg").innerHTML=sendrequest.responseText

;
        }

    }

}


var oPopup = window.createPopup();
function errorToolTip(obj,obj2)
            
{
            
/*500 80*/
                
var mytool=document.getElementById(obj);
                
var toolTop= mytool.offsetTop;
                
var toolLeft= mytool.offsetLeft+82;
                
                oPopup.document.body.innerHTML 

="<div><center><img src="/ShavelingChat/images/info.gif 

"></img></center><br><color=red>
"+obj2+"不能为空!</color></div>"
                oPopup.show(toolLeft,toolTop , 
80,80

chatmsg);
            }


function Check(mytext){
    
var myvalue=ChangeFaceNoToImage(mytext);
    
var reImg= new RegExp("(gif|jpg|png|jpeg|bmp)$""");
    
var isImg = reImg.test(myvalue);

    
var reUrl=new RegExp("http://([\w-]+\.)+[\w-]+(/[\w- 

./?%&=]*)?
""");
    
var isUrl = reUrl.test(myvalue);
    
if(isImg==true && isUrl==true){
    
//    [!CDATA[  ]>
        myvalue="<img src="+myvalue+"></img>";
    }

    
return myvalue;
}



//把表情代码转为图象
function ChangeFaceNoToImage(ChatWord)
{   
    
for (var i = 0;i < 90;i ++)
    
{
        
var changeStr = "<img src="images/face/" + i + ".gif">";
        
var pattern = new RegExp("\[face" + i + "\]");
        pattern.global 
= true;
        
while (pattern.test(ChatWord))
        
{
            ChatWord 
= ChatWord.replace(pattern,changeStr);
        }

    }

    
return ChatWord;
}



//添加表情
function AddFace(FaceNo)
{    
    document.getElementById(
"chatmsg").value += FaceNo;
    GetFocus();
    HideDiv();
}


//聊天输入框聚焦
function GetFocus()
{
    document.getElementById(
"chatmsg").focus();
}




//获取表情
function Getface(){
var btnLeft=document.getElementById("faceBox").style.left;
    
var tem=1;
    
var falg=0;
        
for(j=0;j<90;j++){
            falg
=falg+1;
            
if(falg>10){
            tem
=tem+1;
            falg
=1;
            }

            document.getElementById(
"Face"+tem).innerHTML += 

"<img src="images/face/" + j + ".gif" 

onclick="javascript:AddFace('[face
" + j + "]');" 

onmouseout="javascript:this.style.border ='0';" 

onmouseover="javascript:this.style.border ='1px solid';" alt="点击插

入表情"/>&nbsp;
";
            
        }

        
var handle=document.getElementById("faceBox");
        
var pos = getPosition(handle);
        
var t = pos.top;
        
var l = pos.left;
        document.getElementById(
"mydownDiv").style.left=l-200;
        document.getElementById(
"mydownDiv").style.top=t+22;
        document.getElementById(
"mydownDiv").style.display="";
}



function HideDiv(){
    document.getElementById(
"mydownDiv").style.display="none";
}


function MyHi