AjaxPro实现无刷新更新数据
需求
在一个页面动态无刷新的更新后台得到的数据。要想无刷新的更新数据,需要使用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("UpdateImpData()", 3000);
});
//获取后台数据
function UpdateImpData() {
//得到后台返回的数据
var result = AjaxTest.GetRealValByTagName(tags).value;
if (!result) return;
//更新DOM对应的Text值
for (var i = 0; i < result.length; i++) {
var obj = tagsObj[i];
var xx = obj.Obj;
xx.text(result[i].toFixed(2));
}
}
</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实现无刷新更新数据的更多相关文章
- 使用AjaxPro实现无刷新更新数据
需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(JQuery等)动态更新web页面DOM ...
- [转]jquery 点击表格变为input可以修改无刷新更新数据
原文地址:http://www.freejs.net/article_biaodan_43.html 之前已经发了2篇类似的文章<点击变td为input更新>和<jquery表格可编 ...
- ajaxpro实现无刷新更新数据库【简单方法】
原文发布时间为:2008-10-24 -- 来源于本人的百度文章 [由搬家工具导入] 我用的是AjaxPro.2.dll,然后我想点击那个 “无刷新更新” 那个按钮,实现 无刷新 修改表中的内容 HT ...
- window.history.pushState与ajax实现无刷新更新页面url
ajax能无刷新更新数据,但是不能更新url HTML5的新API: window.history.pushState, window.history.replaceState 用户操作history ...
- jquery表格可编辑修改表格里面的值,点击td变input无刷新更新表格
td点击后变为input可以输入,更新数据,无刷新更新 演示 XML/HTML Code <table border="0" cellpadding="0" ...
- Ajax技术(WEB无刷新提交数据)
(转自:http://www.jb51.net/article/291.htm) Ajax内部交流文档一.使用Ajax的主要原因 1.通过适当的Ajax应用达到更好的用户体验: 2.把以前的一些服务器 ...
- 无刷新更新listview
闲来无事,写点水文吧!有用得着的可以参考下,无刷新更新listview是什么意思呢?举个例子,在订单类listview列表中,常常会有各种订单状态,拿商城类app来说,会有待付款,待收货,确认收货等等 ...
- 利用history.pushState()实现页面无刷新更新
本来是在研究vue-router如何记录滚动位置,点返回的时候还是回到原来的位置,看到有人说的history.state存了一个值,才把history研究一下,发现 history.pushState ...
- djano modles values+ajax实现无页面刷新更新数据
做项目的过程中想通过不刷新页面的方式来进行页面数据刷新,开始使用http://www.cnblogs.com/ianduin/p/7761400.html方式将查询结果数据进行序列化.发现可以行,但是 ...
随机推荐
- HDU 4123 Bob’s Race 树的直径+单调队列
题意: 给定n个点的带边权树Q个询问. 以下n-1行给出树 以下Q行每行一个数字表示询问. 首先求出dp[N] :dp[i]表示i点距离树上最远点的距离 询问u, 表示求出 dp 数组中最长的连续序列 ...
- JS基础——数组总结
JS中数组被觉得是一种对象,慢慢的,怎么忽然感觉,JS中仅仅要能够独立出来的概念怎么都能够当成对象来解释呢?有点儿怀疑.继续学吧.先来总结一下JS中数组是怎样详细使用的. 一.创建 数组的创建在JS中 ...
- Linux经常使用的命令(必看)
http://www.importnew.com/12425.html http://www.importnew.com/13107.html http://www.importnew.com ...
- DevExpress XtraReports 入门四 创建 Web 报表
原文:DevExpress XtraReports 入门四 创建 Web 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这 ...
- .Net 4.5中的HttpClient试用
.Net 4.5中增加了一个新的System.Net.Http.HttpClient名字空间(在 System.Net.Http.dll 中),用于发送 HTTP 请求和接收 HTTP 响应. 基本操 ...
- 杭电1162Eddy's picture
Eddy's picture Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ...
- elasticsearch的rest搜索--- 查询
目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0 三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 四. 查询 1. 查询的官网的文档 ...
- 使用ArcGIS API for Silverlight + Visifire绘制地图统计图
原文:使用ArcGIS API for Silverlight + Visifire绘制地图统计图 最近把很久之前做的统计图又拿出来重新做了一遍,感觉很多时候不复习,不记录就真的忘了,时间是最好的稀释 ...
- 通过私有协议Chrome浏览器页面打开本地程序
近期方有这样的要求:这两个系统,根据一组Chrome开展,根据一组IE开展,需要Chrome添加一个链接,然后进入IE该系统的开发.这,需要Chrome跳转到创建一个链接IE浏览器指定的页面.同时也实 ...
- 【IOS】 遍历info 所有内容 && 唯一的节能设备UUID
/**获取装置imie*/ std::string DeviceInfo::getIMIE() { #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) NSStri ...