实例:利用AJAX和ASP.NET实现简单聊天室
示例程序是一个单一的多用户聊天室。其内部维护着一个已登录用户的列表。列表将祛除session过期的用户。同时它还支持一些命令比如 /admin Clear 清除聊天室 /nick [Name] 改变用户姓名。
AJAX是一个结合了XML 和 Javascript的异步通信机制。现在我们可以只用服务器代码和一点Javascript 。这篇文章就是介绍如何用AJAX技术来构建一个简单的聊天室。
你还需要知道
这个程序使用一个类叫做 ChatEngine 。 这个类控制了全部的用户和消息。用户被储存在一个Hashtable 里,而消息储存在 StringCollection 里:
| Hashtable users; StringCollection chat; |
一个 ChatEngine 的全局实例被放置在 Global.asax.cs :
| public static UChat.ChatEngine.IChatEngine Engine = new UChat.ChatEngine.ChatEngine(); |
一个Javascript 函数用来异步的将全局变量内的数据显示在页面上:
| function setTimers() { timeID = window.setTimeout( "updateAll()", refreshRate ); } |
利用每个用户提供的名称和ID来标识用户:
| public void AddUser(string id, string user) { //make sure user name does not exist already if( !UserExists( user ) ) { //add user to users list users.Add( id, user ); //display a notification message to all users chat.Add( this.MakeServerMessage(string.Format( joinedfmt, user ) )); } } |
截图和实现步骤
![利用AJAX和ASP.NET实现简单聊天室[图1]](/Upfiles/BeyondPic/2007-09/20079132406864052.jpg)
主页显示了聊天室的基本信息,比如有多少人在聊天室、ChatLog的大小。
为了能够登录聊天室,必须提供一个名称。
当 Login 按钮被单击。下面的代码就会被执行:
| protected void Login( object sender, EventArgs e ) { string user = txtUsername.Text; if( !ValidateNick( user ) ) return; if( Global.Engine.UserExists( user ) ) { lblErrorMsg.Text = "A user with this " + "name already exists, try again." return; } Response.Redirect( "Server.aspx?action=Login&u=" + user ); } |
进行一些验证以后,用户会被转向到另一个页面,这个页面会利用 AddUser 函数将用户放入用户列表。当这一切都做好了。用户又会被转向到 Chat.aspx 页面,下面的 Javascript 函数将要执行在这个页面上:
![利用AJAX和ASP.NET实现简单聊天室[图2]](/Upfiles/BeyondPic/2007-09/20079137768929492.jpg)
| <script type="text/javascript"> sniffBrowserType(); //Shows loading.. screen showLoadScreen(); //Set the javascript timer and //loads user list and messages setTimers(); setFocus('mytext'); </script> <input type="text" class="mytext" id="mytext" onkeydown="captureReturn(event)"> |
当用户输入了文字,并且按了回车。下面的代码就会被执行:
| // Capture the enter key on the input box and post message function captureReturn( event ) { if(event.which || event.keyCode) { if ((event.which == 13) || (event.keyCode == 13)) { postText(); return false; } else { return true; } } } function postText() { rnd++; //Clear text box first chatbox = getElement( "mytext" ); chat = chatbox.value; chatbox.value = "" //get user GUID from url userid = location.search.substring( 1, location.search.length ); //construct Ajax Server URL url = 'Server.aspx?action=PostMsg&u=' + userid + '&t=' + encodeURIComponent(chat) + '&session=' + rnd; //Create and set the instance //of appropriate XMLHTTP Request object req = getAjax(); //Update page with new message req.onreadystatechange = function(){ if( req.readyState == 4 && req.status == 200 ) { updateAll(); } } req.open( 'GET', url, true ); req.send( null ); } |
Tags:ASP.NET AJAX ASP.NET聊天室 JavaScript
最新文章
- 客户端与服务器端对URL字符编码和解 [05-07]
- 高手过招 ASP.NET中防范SQL注入式攻 [12-25]
- ASP.NET2.0 AJAX中调用服务器Webse [11-29]
- ASP.NET中检测浏览器属性的方法及代 [11-29]
- ASP.NET2.0中Web Parts介绍及使用实 [11-29]
- 如何实现ASP.NET网站个性化的元素及 [11-24]
- 自定义控件把脚本文件编译为内嵌资 [11-24]
- ASP.NET2.0向其它网页传递信息的方 [11-24]
- 组合ASP.NET数据控件构建接口强大的 [11-24]
- Asp.net中创建类似Google自动感应的 [11-24]
推荐文章


热点文章
亲密接触ASP.Net(1-14)----站长强
ASP.NET中常用的优化性能方法详解
HTML图像热区基本介绍及实例代码
ASP.NET1.1中如何实现动态树实例
ASP.NET 2.0 ObjectDataSource控
Asp.Net时间格式转换方法
ASP.NET生成静态网页的方法
编程高手谈ASP.NET状态管理之客户
Asp.net页面之间跳转的三种方法比
ASP.NET的 Session 详解
深入分析编译asp.net 2.0项目到d
ASP.NET状态保存的方法详细介绍
ASP.NET性能优化-数据库方面的选
ASP.NET页面间传值方法大集会
实例:利用AJAX和ASP.NET实现简单
探讨ASP.NET的本质之IIS以及进程
ASP.NET用户控件返回事件的原理及
如何用ASP.NET 2.0主题控制网站外
ASP.NET性能优化-页面及控件
使用ASP.NET AJAX实现幻灯片效果
请慎用ASP.Net的validateRequest
ASP.NET2.0全新增加控件之ImageM
教你如何利用ASP.net编写发送Ema
完美教程:Asp.net如何导出pdf格式
ASP.NET2.0中CSS失效解决方案大集
结合工作经验总结asp.net几个常用
深入探讨ASP.NET实现回调实现的步
ASP.NET中如何实现通过对话框方式
asp.net数据校验部分的封装与应用
.NET用户控件基本使用及如何创建

