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 相关文章推荐
js+CSS 图片等比缩小并垂直居中实现代码
Dec 01 Javascript
JS和函数式语言的三特性
Mar 05 Javascript
javascript框架设计之框架分类及主要功能
Jun 23 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
Bootstrap进度条学习使用
Feb 09 Javascript
Vue插件打包与发布的方法示例
Aug 20 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 Javascript
JavaScript 常见的继承方式汇总
Sep 17 Javascript
element-ui点击查看大图的方法示例
Dec 14 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面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
webpack4简单入门实例
2018/09/06 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
python复制与引用用法分析
2015/04/08 Python
Python2.x中文乱码问题解决方法
2015/06/02 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python处理文本换行符实例代码
2018/02/03 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
python浪漫表白源码
2019/04/05 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
django正续或者倒序查库实例
2020/05/19 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
心理健康心得体会
2014/01/02 职场文书
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
元旦晚会邀请函
2014/02/01 职场文书
六一活动主持词
2015/06/30 职场文书
Python绘制分类图的方法
2021/04/20 Python