JQuery实现简单的服务器轮询效果实例


Posted in Javascript onMarch 31, 2016

本文实例讲述了JQuery实现简单的服务器轮询效果。分享给大家供大家参考,具体如下:

很多论坛都有进入后,弹出提示,说有多少封邮件没有看,或者是一个oa系统,进入后,提示有多少个任务没有做。每隔一段时间会提示一次,但是如何实现呢。其实,利用jquery的话,会比较简单,核心元素就是json格式解析和setInterval()函数。下面一起来实现:

首先,我们default.aspx的页面如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>
  <link href="Content/jquery-ui-1.7.2.custom.css" rel="stylesheet" type="text/css" />
  <link href="Content/ui.jqgrid.css" rel="stylesheet" type="text/css" />
  <script src="Scripts/jquery-1.3.2.min.js" type="text/javascript"></script>
  <script src="js/i18n/grid.locale-en.js" type="text/javascript"></script>
  <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
  <script src="js/src/grid.base.js" type="text/javascript"></script>
  <script type="text/javascript">
  function showUnreadNews()
  {
    $(document).ready(function() {
      $.ajax({
        type: "GET",
        url: "Result.ashx",
        dataType: "json",
        success: function(msg) {
          //alert(msg);
          $.each(msg, function(id, title) {
            $("#news").append("<a href=detailnews.aspx?id=" + id + ">" + title + "</a><br>");
          });
        }
      });
    });
  }
  setInterval('showUnreadNews()',5000);
  </script>
</head>
<body>
  <form id="form1" runat="server">
  <div id="news">
  </div>
  </form>
</body>
</html>

上面代码主要利用ajax函数向Result.ashx页面发出ajax请求,然后由Result.ashx这个页面返回json数据,并进行解析,最后利用setInterval()函数实现轮询效果,具体的Result.ashx页面代码如下:

<%@ WebHandler Language="C#" Class="Result" %>
using System;
using System.Web;
using System.Text;
using System.Data.SQLite;
using System.Data;
public class Result : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    string sql = "select * from Content where NewsFlag=0";
    DataTable dt = new DataTable();
    using (SQLiteConnection conn = new SQLiteConnection(InitSQLite().Connection))
    {
      SQLiteDataAdapter sda = new SQLiteDataAdapter(sql, conn);
      sda.Fill(dt);
    }
    string jsonStr = GetJson(dt);
    context.Response.ContentType = "text/json";
    context.Response.Buffer = true;
    context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
    context.Response.AddHeader("pragma", "no-cache");
    context.Response.AddHeader("cache-control", "");
    context.Response.CacheControl = "no-cache";
    context.Response.Write(jsonStr);
  }
  public static string GetJson(DataTable dt)
  {
    StringBuilder jsonBuilder = new StringBuilder();
    jsonBuilder.Append("{");
    for (int i = 0; i < dt.Rows.Count; i++)
    {
      jsonBuilder.Append( dt.Rows[i]["NewsID"].ToString() + ":" +"\""+ dt.Rows[i]["NewsTitle"].ToString()+"\",");
    }
    jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
    jsonBuilder.Append("}");
    return jsonBuilder.ToString();
  }
  public Sqlite InitSQLite()
  {
    Sqlite _sqLite = new Sqlite();
    _sqLite.ConnetStringBuilder.DataSource = AppDomain.CurrentDomain.BaseDirectory + "News.db3";
    _sqLite.ConnetStringBuilder.Pooling = true;
    _sqLite.ConnetStringBuilder.FailIfMissing = true;
    _sqLite.ConnetStringBuilder.UseUTF16Encoding = true;
    return _sqLite;
  }
  public bool IsReusable {
    get {
      return false;
    }
  }
}

数据库使用的是sqlite,具体使用方式请自查。这个处理文件中,最重要的是由datatable数据生成符合格式的json数据。

这样,系统最终就实现了,每隔5S钟,首页会向服务器轮询一次数据,以便获得最新的数据。

希望本文所述对大家jQuery程序设计有所帮助。

Javascript 相关文章推荐
jQuery对下拉框,单选框,多选框的操作
Feb 21 Javascript
Javascript数组与字典用法分析
Dec 13 Javascript
jQuery的end()方法使用详解
Jul 15 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
May 25 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
Jul 25 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
预防网页挂马的方法总结
Nov 03 Javascript
你真的了解BOM中的history对象吗
Feb 13 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
微信小程序云开发详细教程
May 16 Javascript
vue prop属性传值与传引用示例
Nov 13 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
JavaScript实现复制内容到粘贴板代码
Mar 31 #Javascript
JavaScript是如何实现继承的(六种方式)
Mar 31 #Javascript
JS判断元素是否在数组内的实现代码
Mar 30 #Javascript
javascript检查某个元素在数组中的索引值
Mar 30 #Javascript
js中数组结合字符串实现查找(屏蔽广告判断url等)
Mar 30 #Javascript
谈一谈js中的执行环境及作用域
Mar 30 #Javascript
js实现(全选)多选按钮的方法【附实例】
Mar 30 #Javascript
You might like
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
2013/06/06 PHP
深入array multisort排序原理的详解
2013/06/18 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
PHP中的session安全吗?
2016/01/22 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
js利用拖放实现添加删除
2020/08/27 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[41:05]Serenity vs Pain 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
在Python中使用正则表达式的方法
2015/08/13 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python3删除排序数组中重复项的方法分析
2019/01/31 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
Python龙贝格法求积分实例
2020/02/29 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
出纳试用期自我鉴定
2014/04/07 职场文书
公司租房协议书
2014/10/14 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android