需求

在一个页面动态无刷新的更新后台得到的数据。要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM对应的数值即可,而AjaxPro库恰恰具有使用Javascript语句获取后台方法返回的数据的功能,问题就这样迎刃而解,顿时感觉萌萌哒。

流程

整个过程如下图所示:

详细操作

首先下载AjaxPro库(点击此处下载AjaxPro库),下载后解压得到两个dll文件,如下所示:

其中AjaxPro.2.dll库是AjaxPro.dll库的升级版本,我们以最新版本AjaxPro.2.dll为例来一步步说明AjaxPro的使用。

接下来创建一个空的Web项目,添加AjaxPro.2.dll引用,新建一个Aspx页面命名为AjaxPro2Test,添加jQuery库和样式文件,项目文件结构如下所示:(请无视其它的文件,这个跟我后台取的数据有关)

打开Web.config配置文件,在web下添加httpHandlers节点,如下所示:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpRuntime/>
    <httpHandlers>
      <add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
    </httpHandlers>
  </system.web>
</configuration>

在AjaxPro2Test页面后台即AjaxPro2Test.aspx.cs文件中的Page_Load方法添加AjaxPro对AjaxPro2Test页面类的注册,为js需要调用的后台方法添加[AjaxPro.AjaxMethod]属性(此方法必须声明为public,否则会提示找不到),可以在页面类前面添加[AjaxPro.AjaxNamespace("AjaxTest")]属性(这样js调用时可以直接使用AjaxTest.方法(参数).value,否则需要使用命名空间.页面类.方法名(参数).value),页面后台代码如下所示:

using System;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PILib;

namespace PiSdkAjaxPro2Test
{   [AjaxPro.AjaxNamespace("AjaxTest")]
    public partial class AjaxPro2Test : System.Web.UI.Page
    {
        private OSIPISDK _pisdk = new OSIPISDK("piserver", "pidemo", "");
        protected void Page_Load(object sender, EventArgs e)
        {
            AjaxPro.Utility.RegisterTypeForAjax(typeof (AjaxPro2Test));
        }
    /// <summary>
    /// 获取实时数据
    /// </summary>
    /// <param name="tagName"></param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public double[] GetRealValByTagName(string tagName)
    {
        var jTagsArray = (JArray)JsonConvert.DeserializeObject(tagName);

        var tagsNameList = jTagsArray.Select(x => x.ToString()).ToList();

        if (!_pisdk.Connected)
        {
            _pisdk.ConnectToServer();
        }
        double[] val;
        _pisdk.GetRealData(tagsNameList.ToArray(), out val);
        return val;
    }
    }
}

AjaxPro2Test页面前台代码如下所示,js代码部分有注释说明:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AjaxPro2Test.aspx.cs" Inherits="PiSdkAjaxPro2Test.AjaxPro2Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="jquery-1.8.3.min.js"></script>
    <link href="AjaxTest.css" rel="stylesheet" />
    <script type="text/javascript">
        var tags = new Array();
        var tagsObj = new Array();
        $(document).ready(function () {
            //遍历class为ai的元素,取得元素tagName数组和对应元素数组
            $(".ai").each(function (i) {
                var tag = $(this);
                var t = tag.attr("tag");
                if (t) {
                    tags[i] = t;
                    tagsObj[i] = { Obj: tag };
                }
            });
            UpdateImpData();
            //每隔3秒更新一下数据
            window.setInterval();
        });
        //获取后台数据
        function UpdateImpData() {
            //得到后台返回的数据
            var result = AjaxTest.GetRealValByTagName(tags).value;
            if (!result) return;
            //更新DOM对应的Text值
            ; i < result.length; i++) {
                var obj = tagsObj[i];
                var xx = obj.Obj;
                xx.text(result[i].toFixed());
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td class="CheckedTD">有功功率</td>
                <td class="rtdb ai" tag="1DCS_AI_SELMW" id="testTag"></td>
            </tr>
            <tr>
                <td class="CheckedTD">汽轮机转速</td>
                <td class="rtdb ai" tag="1DCS_AI_DEHTOCCS"></td>
            </tr>
            <tr>
                <td class="CheckedTD">主汽温度</td>
                <td class="rtdb ai" tag="1DCS_AI_LBA20CT601"></td>
            </tr>
            <tr>
                <td class="CheckedTD">主汽压力</td>
                <td class="rtdb ai" tag="1DCS_AI_LBA20CP101"></td>
            </tr>
            <tr>
                <td class="CheckedTD">再热温度</td>
                <td class="rtdb ai" tag="1DCS_AI_LBB20CT601"></td>
            </tr>
            <tr>
                <td class="CheckedTD">再热压力</td>
                <td class="rtdb ai" tag="1DCS_AI_LBB20CP101"></td>
            </tr>
            <tr>
                <td class="CheckedTD">总煤量</td>
                <td class="rtdb ai" tag="1DCS_AI_COALSUM"></td>
            </tr>
            <tr>
                <td class="CheckedTD">总风量</td>
                <td class="rtdb ai" tag="1DCS_AI_TOTAIRFLOW"></td>
            </tr>
            <tr>
                <td class="CheckedTD">真空</td>
                <td class="rtdb ai" tag="1DCS_AI_MAG10CP102"></td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>

特别说明

就是页面前台代码js代码“var result = AjaxTest.GetRealValByTagName(tags).value;”中的AjaxTest对应后台cs文件中[AjaxPro.AjaxNamespace("AjaxTest")]属性中设置的AjaxTest。

使用AjaxPro.dll库和AjaxPro.2.dll库不同的地方在于Web.config文件配置的不同,使用AjaxPro.dll库的配置文件如下所示:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpHandlers>
      <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
    </httpHandlers>
    <httpRuntime/>
  </system.web>
</configuration>

最终效果

使用AjaxPro实现无刷新更新数据的更多相关文章

  1. AjaxPro实现无刷新更新数据

    使用AjaxPro实现无刷新更新数据 需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(J ...

  2. [转]jquery 点击表格变为input可以修改无刷新更新数据

    原文地址:http://www.freejs.net/article_biaodan_43.html 之前已经发了2篇类似的文章<点击变td为input更新>和<jquery表格可编 ...

  3. ajaxpro实现无刷新更新数据库【简单方法】

    原文发布时间为:2008-10-24 -- 来源于本人的百度文章 [由搬家工具导入] 我用的是AjaxPro.2.dll,然后我想点击那个 “无刷新更新” 那个按钮,实现 无刷新 修改表中的内容 HT ...

  4. window.history.pushState与ajax实现无刷新更新页面url

    ajax能无刷新更新数据,但是不能更新url HTML5的新API: window.history.pushState, window.history.replaceState 用户操作history ...

  5. jquery表格可编辑修改表格里面的值,点击td变input无刷新更新表格

    td点击后变为input可以输入,更新数据,无刷新更新 演示 XML/HTML Code <table border="0" cellpadding="0" ...

  6. Ajax技术(WEB无刷新提交数据)

    (转自:http://www.jb51.net/article/291.htm) Ajax内部交流文档一.使用Ajax的主要原因 1.通过适当的Ajax应用达到更好的用户体验: 2.把以前的一些服务器 ...

  7. 无刷新更新listview

    闲来无事,写点水文吧!有用得着的可以参考下,无刷新更新listview是什么意思呢?举个例子,在订单类listview列表中,常常会有各种订单状态,拿商城类app来说,会有待付款,待收货,确认收货等等 ...

  8. 利用history.pushState()实现页面无刷新更新

    本来是在研究vue-router如何记录滚动位置,点返回的时候还是回到原来的位置,看到有人说的history.state存了一个值,才把history研究一下,发现 history.pushState ...

  9. djano modles values+ajax实现无页面刷新更新数据

    做项目的过程中想通过不刷新页面的方式来进行页面数据刷新,开始使用http://www.cnblogs.com/ianduin/p/7761400.html方式将查询结果数据进行序列化.发现可以行,但是 ...

随机推荐

  1. OpenModelica仿真

    复杂产品通常涉及机械.控制.电子.液压.气动和软件等多学科领域,其设计过程需要进行仿真,以满足对成本.质量.性能等的要求.目前各个学科和领域都已经有了比较成熟的仿真软件,但大部分仿真软件仅适用于本学科 ...

  2. Linux进程管理

    一.进程管理简介 进程是正在执行的程序或命令,每一个进程都是一个运行实体,都有自己的地址空间,并占用一定的系统资源. 进程管理的作用: 1.判断服务器的健康状态 2.查看系统中的所有进程 3.杀死进程 ...

  3. Web开发中20个很有用的CSS库

    来源: 微信公众号文章 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS库,框架,应用这 ...

  4. JPA,EclipseLink 缓存机制学习(一) 树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  5. 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification

    在该文章的两大创新点:一个是PReLU,一个是权值初始化的方法.下面我们分别一一来看. PReLU(paramter ReLU) 所谓的PRelu,即在 ReLU激活函数的基础上加入了一个参数,看一个 ...

  6. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  7. Selenium:元素等待的4种方法

    1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用. 2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间.默认值是 ...

  8. Android 开发如何选择轮子(转)

    一个项目的开发,我们不可能一切从0做起,如果真是这样,那同样要哭瞎.因此,善于借用已经做好的 "车轮" 非常重要,如: 网络访问框架:OKHttp.retrofit.android ...

  9. ORM框架通过映射(反射)获取数据库的数据

    ORM(Object Relational Mapping)框架采用元数据来描述对象一关系映射细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中.只要提供了持久化类与表的映射关系,ORM ...

  10. java, mybatis, 调用mysql存储过程

    Map<String, Object> bindinfo = new HashMap<String, Object>();            bindinfo.put(&q ...