分享
 
 
 

无刷新聊天室的技术实现

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

先简单说明下

服务端

用程序生成需要的 XML 文件

客户端

利用 XMLHTTP 或者 DSO(注意状态) 定时刷新需要的数据

相对来说 DSO 可以映射成 recordset 操作比较简单

以下是我简单写着玩的东西 不是完整部分 而且十分简陋

只是代码片段 但作为技术参考已经足够

需要 MSXML 4.0

服务端 我写了两个构造函数 分别是 聊天内容 聊天用户

<script language="JScript" runat="server">

function SLIGHTBOYChat()

{

this.ID;

this.XMLDOMElement = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")

this.Add = function(Name, Content, Append)

{

var root = this.XMLDOMElement.documentElement;

var newItem = this.XMLDOMElement.createElement("Item");

var newItemName = this.XMLDOMElement.createElement("Name");

var newItemNameValue = this.XMLDOMElement.createCDATASection(Name);

newItemName.appendChild(newItemNameValue)

var newItemContent = this.XMLDOMElement.createElement("Content");

var newItemContentValue = this.XMLDOMElement.createCDATASection(Content);

newItemContent.appendChild(newItemContentValue)

var newItemAppend = this.XMLDOMElement.createElement("Append");

newItemAppend.text = Append;

newItem.appendChild(newItemName);

newItem.appendChild(newItemContent);

newItem.appendChild(newItemAppend);

if ( root.childNodes.length > 10 )

{

root.removeChild(root.firstChild)

}

root.appendChild(newItem)

}

this.Save = function()

{

Application("ChatContent") = this.XMLDOMElement.xml;

}

this.GUID = function(PushGUID)

{

if ( PushGUID.Count > 0 )

{

this.ID = PushGUID;

}

else

{

this.ID = "";

}

}

this.Xml = function()

{

if ( this.ID != "" )

{

var XMLDOMElementString = "<?xml version=\"1.0\" encoding=\"gb2312\"?><Chat>";

var items = Chat.XMLDOMElement.selectNodes("//Item[Append > "+ this.ID +"]")

for (var item = items.nextNode(); item; item = items.nextNode())

{

XMLDOMElementString += item.xml;

}

XMLDOMElementString += "</Chat>";

if ( items.length > 0 )

{

return XMLDOMElementString;

}

else

{

return;

}

}

else

{

return this.XMLDOMElement.xml.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>");

}

}

this.Load = function()

{

if ( Application("ChatContent") == "" | typeof(Application("ChatContent")) == "undefined" )

{

Application("ChatContent") = "<?xml version=\"1.0\" encoding=\"GB2312\"?><Chat><Item><Name>slightboy</Name><Content>欢迎 ^^</Content><Append>"+ new Date().getTime() +"</Append></Item></Chat>";

}

this.XMLDOMElement.loadXML(Application("ChatContent"));

}

this.Empty = function()

{

Application("ChatContent") = "<?xml version=\"1.0\" encoding=\"GB2312\"?><Chat><Item><Name>slightboy</Name><Content>欢迎 ^^</Content><Append>"+ new Date().getTime() +"</Append></Item></Chat>";

}

this.Load();

}

function SLIGHTBOYChatList()

{

this.XMLDOMElement = Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")

this.Add = function(Name, Level)

{

var root = this.XMLDOMElement.documentElement;

var newItem = this.XMLDOMElement.createElement("Item");

var newItemName = this.XMLDOMElement.createElement("Name");

var newItemNameValue = this.XMLDOMElement.createCDATASection(Name);

newItemName.appendChild(newItemNameValue)

var newItemLevel = this.XMLDOMElement.createElement("Level");

var newItemLevelValue = this.XMLDOMElement.createCDATASection(Level);

newItemLevel.appendChild(newItemLevelValue)

var newItemAppend = this.XMLDOMElement.createElement("Append");

newItemAppend.text = Append;

newItem.appendChild(newItemName);

newItem.appendChild(newItemLevel);

root.appendChild(newItem)

}

this.Save = function()

{

Application("ChatUser") = this.XMLDOMElement.xml;

}

this.Xml = function()

{

return this.XMLDOMElement.xml.replace("<?xml version=\"1.0\"?>","<?xml version=\"1.0\" encoding=\"gb2312\"?>");

}

this.Load = function()

{

if ( Application("ChatUser") == "" | typeof(Application("ChatUser")) == "undefined" )

{

Application("ChatContent") = "<?xml version=\"1.0\" encoding=\"GB2312\"?><Chat></Chat>";

}

this.XMLDOMElement.loadXML(Application("ChatUser"));

}

this.Remove = function()

{

var RemoveTimer = new Date().getTime();

RemoveTimer -= 300000;

var root = this.XMLDOMElement.documentElement;

var RemoveNodes = root.selectNodes("//Item[Append < "+ RemoveTimer +"]");

while (RemoveNodes.peekNode() != null)

{

RemoveNodes.removeNext();

}

}

this.Load();

}

</script>

客户端聊天内容显示页面

<html>

<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>

<script language="JavaScript">

function SLIGHTBOYChat()

{

this.GUID = "";

this.recordset;

var Timer = new Date();

this.CheckState = function()

{

if ( xmlChat.readyState == "complete" )

{

this.recordset = xmlChat.recordset;

this.Item();

}

}

this.Item = function()

{

try

{

var PushString;

this.recordset.MoveLast();

if ( this.recordset("Append").value != this.GUID)

{

this.GUID = this.recordset("Append").value;

}

else

{

this.recordset = null;

return;

}

this.recordset.MoveFirst();

while (!this.recordset.EOF)

{

Timer.setTime(this.recordset("Append").value)

PushString = this.recordset("Name").value +" 说: "+ this.recordset("Content").value +" <small>"+ Timer.toLocaleString() +"</small>";

this.Push(PushString);

this.recordset.moveNext();

}

this.recordset = null;

}

catch(e)

{

return;

}

}

this.Push = function(PushString)

{

var ChatItem = document.createElement("li");

ChatItem.innerHTML = PushString;

ChatList.insertAdjacentElement("afterBegin",ChatItem);

}

this.Load = function()

{

xmlChat.src = "background.asp?GUID="+ this.GUID;

}

this.Remove = function()

{

try

{

var Removelength = ChatList.children.length;

for (var i = 0; i < Removelength; i++)

{

ChatList.removeChild(ChatList.children(0));

}

}

catch(e)

{

}

}

}

var Chat = new SLIGHTBOYChat();

window.setInterval("Chat.Load()", 5000);

</script>

</head>

<body>

<xml id="xmlChat" src="background.asp" onreadystatechange="Chat.CheckState()"></xml>

<ul id="ChatList" style="list-style: none;margin: 0px;">

<li>欢迎访问 SLIGHTBOY XML ChatRoom...<small>(SLIGHTBOY)</small></li>

</ul>

</body>

</html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有