需求

在一个页面动态无刷新的更新后台得到的数据。要想无刷新的更新数据,需要使用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. _beginthreadex注意事项

    _beginthreadex 当失败时返回0 而不是 -1L _beginthreadex调用之后返回的HANDLE,必须手动CloseHandle,才能正确释放句柄.

  2. 调用微信JsAPI端获取位置

    public partial class test : BasePage { protected test() { AccessPage = PageWebType.WX; } protected s ...

  3. Windows_RTM_RC

    1.https://zhidao.baidu.com/question/172764638.html RTM(Release to Manufacturing)版 软件在正式在零售商店上架前,需要一段 ...

  4. 参考__MySql

    博客 三范式 事务隔离级别 列表

  5. sql常用语句

    选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delet ...

  6. 关于前端CSS预处理器Sass的小知识!

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  7. golang os/exec 执行外部命令

    exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (st ...

  8. ubuntu14.04利用aliyun安装docker

    docker官网上的安装步骤比较麻烦,而且下载下来后pull镜像也特别慢.通过阿里云可以快速安装docker,并且可配置加速器.通过阿里云超快速安装docker: 安装或升级Docker 请安装1.6 ...

  9. UGUI text image 等加Shadow OutLine等

    Text,文本控件,同NGUI中的Label.支持动态字库.大小调节.富文本(基本的html标签格式)等等.描边.阴影等需要Effect组件支持.Add Component-->UI--> ...

  10. STM32 串口固件库中定义的几个中断标志位什么意思?

    在stm32f10x_usart.h中以上几个宏,很没有规律,诈一看还真不知道为什么会这么定义,其实通过代码就很容易明白: D7~D5:代表中断标志位对应的中断使能位在 CR1.CR2还是CR3寄存器 ...