Ajax轮询消息自动提示(消息盒子)

经过一下午写了个消息盒子的例子,用的是ajax方式轮询读取,没有用到后台自动“推”数据的方式,效果良好。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="mainTalk.aspx.cs" Inherits="wj_test.Talk.mainTalk" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <mce:script src="../Scripts/jquery-1.4.1.js" mce_src="Scripts/jquery-1.4.1.js" type="text/javascript"></mce:script>
    <mce:style><!--
        body
        {
            font-size: 12px;
        }
        #content
        {
            width: 200px;
            height: 50px;
            border: solid 1px #dedede;
            background-color: #eee;
        }
        #news
        {
            width: 200px;
            height: 13px;
            font-weight: bold;
        }
        li
        {
            height: 16px;
            line-height: 16px;
            list-style: none;
            color: #226B19;
        }
        a
        {
            text-decoration: none;
            color: #9E3423;
        }

--></mce:style><style mce_bogus="1">        body
        {
            font-size: 12px;
        }
        #content
        {
            width: 200px;
            height: 50px;
            border: solid 1px #dedede;
            background-color: #eee;
        }
        #news
        {
            width: 200px;
            height: 13px;
            font-weight: bold;
        }
        li
        {
            height: 16px;
            line-height: 16px;
            list-style: none;
            color: #226B19;
        }
        a
        {
            text-decoration: none;
            color: #9E3423;
        }
    </style>
    <mce:script type="text/javascript"><!--
        function getData() {//获取留言数据
            var temp = "";
            $.getJSON("Data.aspx", { ID: "2", time: new Date() }, function (json) {//利用ajax返回json的方式
                if (json.length > 0) {//返回有数据
                    $("#news").html(" <font color=‘Red‘>有新消息:</font>");
                    for (var i = 0; i < json.length; i++) {//循环json,生成需要的标签
                        temp += "<li id=‘" + json[i].ID + "‘ ><img src="../img/t.gif" mce_src="img/t.gif" style=‘height: 14px; width: 14px‘ /><a  href="#" mce_href="#" onclick=‘getHref(" + json[i].ID + "); return false;‘ >" + json[i].SendID + "给您留言了</a></li>";
                    }
                    $("#info li").remove(); //移除之前的元素li
                    $("#info").append(temp); //追加新的
                    $("li").hide(); //隐藏全部,只显示前2条
                    $("li:eq(0)").show();
                    $("li:eq(1)").show();
                }
                else {
                    $("#news").html(" <font color=‘#999‘>无新消息:</font>"); //无数据时的提示
                }
            })
        };
        $(function () {//间隔3s自动加载一次
            getData(); //首次立即加载
            window.setInterval(getData, 3000); //循环执行!!
            }
         );
        function getHref(id) {//重定向页面并且移除当前li标签
            location.href = ‘ShowAndRe.aspx?ID=‘ + id;
            $(document.getElementById(id)).remove();
        }

// --></mce:script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="content">
        <div id="news">
        </div>
        <ul id="info" style="margin: 0 0 0 0;" mce_style="margin: 0 0 0 0;">
        </ul>
    </div>
    </form>
</body>
</html>

前台的HTML代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Text;
namespace wj_test.Talk
{
    public partial class Data : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["ID"] != null)
            {
                string id = Request.QueryString["ID"].ToString();
                SqlConnection scn = new DB().getDB();
                scn.Open();
                string str = "select * from test_talk where Station=0 and ReID="+id+" order by ID desc";
                SqlDataAdapter ada = new SqlDataAdapter(str, scn);
                DataTable dt = new DataTable();
                ada.Fill(dt);
                scn.Close();
                if (dt.Rows.Count > 0)
                {
                    string json = DataTable2Json(dt);
                    Response.Write(json);
                }
                else
                    Response.Write("{}");//为空时返回{} 使json对象的length=0
            }
        }
        public static string DataTable2Json(DataTable dt)
        {
            StringBuilder jsonBuilder = new StringBuilder();
            jsonBuilder.Append("[");
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                jsonBuilder.Append("{");
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    jsonBuilder.Append("/"");
                    jsonBuilder.Append(dt.Columns[j].ColumnName);
                    jsonBuilder.Append("/":/"");
                    jsonBuilder.Append(dt.Rows[i][j].ToString());
                    jsonBuilder.Append("/",");
                }
                jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
                jsonBuilder.Append("},");
            }
            jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
            jsonBuilder.Append("]");
            return jsonBuilder.ToString();
        }
    }
}

后台的C#代码,获取数据:

时间: 2024-11-02 23:22:31

Ajax轮询消息自动提示(消息盒子)的相关文章

闲话ajax,例ajax轮询,ajax上传文件

引语:ajax这门技术早已见怪不怪了,我本人也只是就自己真实的经验去总结一些不足道的话.供不是特别了解的朋友参考参考! 本来早就想写一篇关于ajax的文章的,但是前段时间一直很忙,就搁置了,趁着元旦放假,赶紧补上吧! ajax的出现,可以出给用户带来了很好的体验,证据如下: 1.感觉:以前要给用户呈现新的内容,就必须要刷新当前页面,结果往往是这样:用户看着看着,唰...,然后又重头看起,我那个去,这谁受得了; 自从有了ajax后,就是这样的,用户关注哪一块,变化哪一块,我们就更新那一块,完全看不

long poll、ajax轮询和WebSocket

websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享.废话这么多了,最后再赞一个~ WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 1.1 和 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说

COMET探索系列二【Ajax轮询复用模型】

COMET探索系列二[Ajax轮询复用模型] 写在前面:Ajax轮询相信大家都信手拈来在用,可是有这么一个问题,如果一个网站中同时有好多个地方需要用到这种轮询呢?就拿我们网站来说,有一个未读消息数提醒.还有一个时实时加载最新说说.昨天又加了一个全网喊话,以后还会要有类似功能添加是肯定的,难道要为每个功能都创建一个独立的轮询?要知道轮询请求中有大半是无用,会对服务器资源和宽带造成巨大的浪费.因此在页面中每增加一个轮询点,对服务器的压力及宽带浪费都将成倍的增长.再考虑一个情况,如果当前网页中需要的不

Ajax轮询——“定时的通过Ajax查询服务端”

Ajax轮询——"定时的通过Ajax查询服务端". 概念: 轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 百闻不如一见,来段代码相信你一看就明白 //为了让同学们都明白,我用了最简单的实现方法,同学们懂了原理后可以自行衍生: Reception.html //前端代码 <html> <head> <title></title> <script src="

ajax轮询请求实现源码分享

ajax轮询请求状态是ajax学习中非常重要的也是必须掌握的知识点,今天就和大家一起来分享一下这部分内容,一起来看看吧.      这里要实现的功能是:通过扫码微信公众号带参数的二维码,来登录网站.      但很明显,如果ajax不间断的请求服务器,这样会加重服务器的负荷,所以本例采用的是js的setInterval来周期性调用执行一个ajax函数来来向服务器请求数据,但请求成功或者请求一定次数后还未成功时用clearinterval函数清空计时器. 代码和注释如下:(后端采用thinkPHP

ajax轮询session阻塞问题

近来读了几篇关于ASP.NET下Session机制的文章,结合自己的实际应用,有点感想: 在ASP.NET的Session的默认机制下,对同一个SessionID下的用户请求ASP.NET的Session数据的操作会引起排他锁,假设在同一个SessionID下有多个用户同时请求Session数据的话,就会出现很大的延迟现象.把Session的信息设置为ReadOnly,将不会在导致排他锁的出现.但是,只读Session'数据的操作还是要等待对Session的读写操作引起的排他锁的释放. 因此在不

【Javascript】解决Ajax轮询造成的线程阻塞问题(过渡方案)

一.背景 开发Web平台时,经常会需要定时向服务器轮询获取数据状态,并且通常不仅只开一个轮询,而是根据业务需要会产生数个轮询.这种情况下,性能低下的Ajax长轮询已经不能满足需求,频繁的访问还会造成线程阻塞.最优的解决方案当然是用Websocket,采用服务器推送的方式来减少频繁开关连接造成的开销.但是Websocket对于我来说还只是个新事物,在未完成论证的情况下不能直接开发完就上,因此只好采用过渡方案,使用队列的方式,暂时优化多AJax长轮询的情况下造成的线程阻塞问题. 我所用的Web平台框

ajax轮询与长轮询

  刚刚网了关于轮询的知识,必须拿到自己这里来做个备份了! 其实以前用ajax轮询做个及时数据更新的,只是当时做了不知道那个就是轮询. 首先我们什么时候会想到用轮询技术呢? 一般而言,最多的是及时信息更新,比如一个商城活动,参与人数的实时更新等,也还有人用来做过聊天室的,但是哈,轮询技术问题还是很多的,频繁的请求的服务器,服务器会把IP给你列入非白名单里,让你无法请求服务器.所以做及时的我还是建议用websocket 建立长连接. 其次小杨用一位老师的原话来讲解一下ajax轮询技术: 一.Aja

Ajax轮询请求

Ajax轮询请求 什么是轮询? 轮询(polling):客户端按规定时间定时向服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. Ajax轮询需要服务器有很快的处理速度与快速响应. Ajax轮询实现 Ajax轮询原理 客户端是按照规定时间(这个时间由你设定,此处默认为1秒)像服务端发送请求,前一次请求完成后,无论有无结果返回,一秒之后下一次请求又会发出.这就叫做Ajax轮询. <script> $(function(){ var code,status; function g