htm5-websocket实现数据查询应用
htm5-websocket实现数据查询应用
在之前的文章讲述了使用Websocket调用远程方式的功能,在这基础我们可以简单地使用WebSocket进行数据处理方面的应用;只需要在方法执行相关的数据库操作返回即可,结合jeasyui库所提供丰富的控件进行数据应用处理变得非常简单的事情.下面使用jeasyui和WebSocket实现一个查询Northwind数据订单的应用案例.
首先分析一下以下一个订单查询案例所需要的逻辑功能.

从以上的案例图中可以得到包括的功能如下:
1)雇员查询
2)客户查询
3)订单分页查询
4)订单明细查询
C#代码
针对以上功能可以实现简单的逻辑查询,代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public class Handler { public IList<BLEmployee> ListEmployees() { Console.WriteLine("List Employees"); IList<BLEmployee> items = new Expression().List<Employee, BLEmployee>(); return items; } public IList<BLCustomer> ListCustomers() { Console.WriteLine("List Customers"); IList<BLCustomer> items = new Expression().List<Customer, BLCustomer>(); return items; } public IList<BLOrderDetail> GetOrderDetail(int orderid) { Console.WriteLine("GetOrderDetail OrderID:{0}", orderid); return (Order.orderID == orderid).List<OrderDetail, BLOrderDetail>(); } public OrderSearchResult ListOrder(OrdersSearch search) { Console.WriteLine("ListOrder Employee:{0}\t Customer:{1}", search.EmployeeID, search.CustomerID); OrderSearchResult result = new OrderSearchResult(); Expression exp = new Expression(); if (!string.IsNullOrEmpty(search.CustomerID)) exp &= Customer.customerID.At() == search.CustomerID; if (search.EmployeeID > 0) exp &= Employee.employeeID.At() == search.EmployeeID; int count = exp.Count<Order>(); result.Orders = exp.List<Order, BLOrder>(new Region(search.Page, search.PageSize)); result.Count = count; return result; } } |
借助于开源组件Smark.Data的功能,只需要编写简单的代码就能实现相应的数据查询逻辑处理.
JavaScript
定义websocket连接:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
//创建连接 function connect() { channel = new TcpChannel(); channel.Connected = function (evt) { $('#dlgConnect').dialog('close'); setTimeout(listEmployee, 50); setTimeout(listCustomer, 50); listOrder(); }; channel.Disposed = function (evt) { $('#dlgConnect').dialog('open'); }; channel.Error = function (evt) { alert(evt); }; channel.Connect($('#txtHost').val()); } |
在连接创建完成事件中进行数据查询操作,由于连续进行3以上的websocket的发送操作会导致发送不成功,之于具体原因暂不清楚.所以只能通过setTimeout来控制初始化的数据查询.连接创建后就可以进行远程方法调用,进行数据查询操作具体相关代码如下:
雇员查询远程调用方法:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//雇员查询 var callListEmployees = { url: 'Handler.ListEmployees', parameters: {} }; function listEmployee() { channel.Send(callListEmployees, function (result) { result.data.unshift({ EmployeeID: 0, FullName: 'null' }); $('#employees').combobox({ data: result.data, valueField: 'EmployeeID', textField: 'FullName' }); }); } |
客户查询远程调用方法:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//客户查询 var callListCustomers = { url: 'Handler.ListCustomers', parameters: {} }; function listCustomer() { channel.Send(callListCustomers, function (result) { result.data.unshift({ CustomerID: '', CompanyName: 'null' }); $('#customers').combobox({ data: result.data, valueField: 'CustomerID', textField: 'CompanyName' }); }); } |
订单查询远程调用方法:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//订单查询 var callListOrder = { url: 'Handler.ListOrder', parameters: { search: { EmployeeID: 0, CustomerID: null, Page: 0, PageSize: 10} } }; function listOrder() { channel.Send(callListOrder, function (result) { $('#orders').datagrid('loadData', result.data.Orders); $('#pp').pagination('refresh', { total: result.data.Count }); }); } |
订单明细远程调用方法:
|
1
2
3
4
5
6
7
8
9
10
|
//订单明细 var callGetOrderDetail = { url: 'Handler.GetOrderDetail', parameters: {orderid:0} }; function getOrderDetail() { channel.Send(callGetOrderDetail, function (result) { $('#gdOrderDetail').datagrid('loadData', result.data); }); } |
总结
只需要以上简单的代码就可以实现一个订单查询功能,看上去和传统的ajax应用差不多,而这里使用的服务是基于websocket而不是webserver.
htm5-websocket实现数据查询应用的更多相关文章
- Django models .all .values .values_list 几种数据查询结果的对比
Django models .all .values .values_list 几种数据查询结果的对比
- MVC实用架构设计(三)——EF-Code First(4):数据查询
前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- SharePoint服务器端对象模型 之 使用CAML进展数据查询
SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...
- .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)
阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...
- Yii2 数据查询
转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...
- 6、SQL Server 数据查询
一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...
- SQL Server 的表数据简单操作(表数据查询)
--表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例: use 商品管理数据库 go ...
- asp.net mvc 数据查询赋值到文本框中
大家做了很多文本框查询并且赋值回来 1.先是把数据对象查询结果后台,然后把对象赋值给对象在赋值回来前台页面 2.使用@html helerper 数据查询,使用 ViewContext.RouteDa ...
随机推荐
- Python自学:第三章 使用列表中的各个值
bicycles = ['trek','cannondale','redline','specialized'] message = "My first bicycle was a &quo ...
- 码云 git sourceTree 私有
1:首先注册码云账号,并建立一个私有项目 2:私有项目连接需要通过SSH验证,我们先在window上安装好git,然后打开git cmd 3:执行命令 ssh-keygen -t rsa -C &qu ...
- xlwt 写sheet xls 文件
import xlwtworkbook = xlwt.Workbook()#创建bookworksheet = workbook.add_sheet('My Sheet') #添加sheet#背景色的 ...
- CSS font-family字体大合集
在写文字内容占大篇幅的页面是,总是会面临着改变字体的需求,以下为font-family常用合集以及一部分文字效果: windows常见内置中文字体 字体中文名 字体英文名 ...
- springcloud入门-什么是springcloud
1.单体应用架构存在的问题 一个归档包(例如war)包含所有功能的应用程序,通常称为单体应用. 相信很多项目都是从单体应用开始的,单体应用比较容易部署和测试,项目的初期,项目可以很好的运行,然而,随着 ...
- Python3+qrcode+zxing生成和识别二维码教程
一.安装依赖库 pip install qrcode pillow image zxing pillow是python3中PIL的代替库,image是生成图版需要用到的库 安装image时报错“Cou ...
- Linux下maven安装
1.下载maven的tar.gz格式文件到/opt文件夹下 2.解压mavenmaven压缩包 tar -xvzf maven.tar.gz -C /usr/local 3.配置maven的环境变量 ...
- vue的.vue文件是怎么run起来的(vue-loader)
vue的.vue文件是怎么run起来的(vue-loader) 引子:vue的.vue文件是怎么跑起来的? 答:通过vue-loader,解析.vue文件,在webpack解析,拆解vue组件 1.v ...
- Spring MVC 复习笔记05
1. 上传图片 1.1 springmvc中对多部件类型解析 在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对mu ...
- n阶楼梯,一次走1,2,3步,求多少种不同走法
##已知n阶楼梯,一次可以迈1,2,3步.求所有走法## 如果要列出走法,时间复杂度太高,O(n)=2**n,前两个函数遍历走法.## 如果只是单纯列出走法数量,就简单多了,也但是很容易内存爆表. # ...