原文地址:http://www.duduwolf.com/post/chatroom_for_AJAX.asp
應Aether之邀寫一個基礎點的AJAX操作實例,想來想去就寫一個聊天室吧,以前寫AJAX時一來偷懶,二來為了簡單,都用純文本或者javascript數組進行交互,這次改成純粹的xml操作。想得時候很簡單,無非就處理發送消息,接收消息,登陸和退出這幾種事件,但真正要寫的時候還是頗費周折,主要是ASP對Session間的消息(對象)傳遞功能太弱了,只能在Application、數據庫、自定義服務端組件三種方法中挑一個,自定義服務端組件先Pass了,既然要寫一個輕量級的,數據庫能不用就不用了,最后還是盯上了Application。
聊天室最重要的功能就是一個用戶發出消息后所有用戶都要能接收到,接受到消息后應該給這則消息一個標記或者刪除操作。ASP的Application對象可以實現Session間的數據交互,再結合類似于Map的Scripting.Dictionary這個內置對象,應該就能實現我想要的效果。但是在實際編寫過程中發現Scripting.Dictionary對象實例根本無法存儲到Application中,查了MSDN后才知不允許將OBJECT和自定義組件以外的對象存儲到Application中,包括自定義Class,暈,只得另想辦法,最后選定用數組方式解決。
客戶端我用javascript的prototype(原型)功能寫了一個ChatRoom類,用面向對象的方式實現了發送接收消息,登錄和退出。下面就是聊天窗口,請輸入昵稱登錄后就能開始聊天了:)程序還有很多bug,實在無心調試了。
下載:http://www.duduwolf.com/test/chatRoom.asp.txt
<script language="javascript" type="text/javascript" src="http://www.duduwolf.com/test/chatRoom.asp?act=script"></script>
<div id="chatRoom"></div>
<script>var chat = new ChatRoom('chat', document.getElementById('chatRoom'), 500, 400);</script>