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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
jquery 新浪网易的评论块制作
Jul 01 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
Aug 27 Javascript
围观tangram js库
Dec 28 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
Vue2学习笔记之请求数据交互vue-resource
Feb 23 Javascript
为输入框加入数字js校验代码分享
Nov 02 Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 Javascript
vue中的数据绑定原理的实现
Jul 02 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
Apr 04 Javascript
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
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 破解防盗链图片函数
2008/12/09 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
2017/02/27 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
页面点击小红心js实现代码
2018/05/26 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
python实现清屏的方法
2015/04/30 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
python:按行读入,排序然后输出的方法
2019/07/20 Python
Python实现FLV视频拼接功能
2020/01/21 Python
最新PyCharm 2020.2.3永久激活码(亲测有效)
2020/11/26 Python
纯css3实现图片翻牌特效
2015/03/10 HTML / CSS
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
Java的基础面试题附答案
2016/01/10 面试题
什么是事务?事务有哪些性质?
2012/03/11 面试题
卫校毕业生自我鉴定
2013/10/31 职场文书
爱国口号
2014/06/19 职场文书
仓库管理员岗位职责
2015/02/03 职场文书