asp.net 即時訊息提示

iDotNetSpace發表於2010-09-10

很多的sns網站都提供了短訊息功能。而且,如果我們線上的話會很快的收到好友的短訊息。
這裡介紹一種客戶端的方法,簡單實現。

主要的表:
user
    :Uid UName Password 三個欄位
Message
    :Mid, SenderId, ReceiverId, State, Detail(SenderId和 ReceiverId)都是外來鍵且對應user表中的Uid。


主要的思路很簡單:用js每隔五秒鐘傳送一次ajax請求,獲取當前使用者在Message表中State為未讀取(這裡約定為數字1)且ReceverId為當前使用者ID的Message 記錄的數量。

頁面的程式碼:






    無標題頁
    <!-- 兩個js指令碼檔案--&gt
   
   


   
   

        您有條短訊息
   

   



js程式碼:這裡用到了Jquery框架,不再贅述,網上有很多的資料。
GetMessageCount.js
//------GetMessageCount.js Begin----------------------
if(!GetMessageCount){
    var GetMessageCount = {};
}

$(document).ready(
    function(){
        GetMessageCount.FindMessage();
    }
);

GetMessageCount.FindMessage = function(){
        $.ajax({
           //處理ajax請求
           url:'FindNewMessage.ashx',
           // 當前使用者的ID,這裡圖省事就省略了,直接寫死為 1,
           //實際使用過程中可以從session中獲取 。。。。
           data:{Uid:1},
           cache: false,
           //回撥函式返回未讀簡訊數目
           success: function(response)
           {
              $('#messageCount').val(response);
           },
           error:function(data)
           {
               alert("載入失敗");
           }
       });
       //每隔5 秒遞迴呼叫一次,重新整理未讀簡訊數目
       window.setTimeout(GetMessageCount.FindMessage,5000);核心語句
}
//------GetMessageCount.js End----------------------

到了這裡,貼出處理ajax請求頁面的程式碼,非常簡單
FindNewMessage.ashx

//----------------'FindNewMessage.ashx Begin
using System;
using System.Collections;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

namespace MIDemo
{
    ///
    /// $codebehindclassname$ 的摘要說明
    ///

    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class FindNewMessage : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
              //就這一句程式碼,獲取未讀簡訊的數量,返回頁面
              //後臺的sql程式碼就省略了
            int count = SqlHelp.SqlHelp.GetUnreadMessageCount(Convert.ToInt32(context.Request["Uid"]));
            //返回頁面
            context.Response.Write(count);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

//----------------'FindNewMessage.ashx End

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-673141/,如需轉載,請註明出處,否則將追究法律責任。

相關文章