为前端提供数据

随着HTML5和CSS3在应用程序开发中地大量使用,市场中在IOS工程师和Android工程师之外多了一种需求——Web前端工程师。在这个用户至上的市场下,客户越来越重视呈现在他们眼前的形式,包括熟悉的网页等。也许你是做算法设计的,也许你是做数据模型设计的,也许你是做系统架构设计的……但是,我相信你看完下面的几个网站,也会开始对呈现方式有所看法。

1. 班得瑞 http://www.bandari.net/

2. 临沧银毫茶业 http://www.lcyhcy.com/

3. Ghost博客中文版 http://ghost.diancloud.com

尽管这些网页设计得如此优雅,但是还需要有数据的支撑。不管是新闻还是产品展示,都离不开数据库为页面提供需要的数据。因此,这里提供一种简单方式使得前端的页面拿到需要的数据,让前端工程师把主要的精力放在界面设计上,快速完成项目的开发。另外,让前端工程师和数据开发工程师都各尽其职,保证项目的并行推进。

废话一堆,下面进入正题。这里的提供的方式是:服务端以一般处理程序(.ashx)的方式提供数据接口,客户端通过jQuery中ajax的jsonp方式读取数据并呈现。开始吧……

第一步:编写服务端的数据接口

1. 一般处理程序(DataServicesHandler.ashx)

 1 <%@ WebHandler Language="C#" Class="DataServicesHandler" %>
 2
 3 using System;
 4 using System.Web;
 5 using System.Data;
 6 using System.Collections.Generic;
 7
 8 public class DataServicesHandler : IHttpHandler {
 9
10     public void ProcessRequest (HttpContext context) {
11         context.Response.ContentType = "text/plain";
12         Dictionary<string, string> customParams = new Dictionary<string, string>();
13         // 取到callback函数名
14         customParams["Callback"] = context.Request["callback"];
15
16         // 数据服务提供的Json数据
17         DataTable allBulletins = DbHelper.GetWholeBulletins();
18         customParams["JsonData"] = ToJson.DatatableToJson(allBulletins, "Bulletin");
19
20         // 数据传回客户端的形式:callback+(json)
21         customParams["JsonpClient"] = string.Format("{0}({1})", customParams["Callback"], customParams["JsonData"]);
22         context.Response.Write(customParams["JsonpClient"]);
23         context.Response.End();
24     }
25
26     public bool IsReusable {
27         get {
28             return false;
29         }
30     }
31
32 }

2. 数据库辅助类(DbHelper.cs)

 1 using System;
 2 using System.Data;
 3 using System.Data.SqlClient;
 4 using System.Configuration;
 5
 6 /// <summary>
 7 /// 与DBMS交互
 8 /// </summary>
 9 public sealed class DbHelper
10 {
11     public static DataTable GetWholeBulletins()
12     {
13         DataTable resultDataTable = new DataTable();
14
15         string connString = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;
16         string query = "SELECT BulletinID,BulletinTitle,BulletinContent,BulletinTime FROM Bulletin";
17         using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(query, connString))
18         {
19             sqlAdapter.Fill(resultDataTable);
20             sqlAdapter.Dispose();
21         }
22
23         return resultDataTable;
24     }
25 }

3. JSON辅助类(ToJson.cs)

 1 using System;
 2 using System.Text;
 3 using System.Data;
 4
 5 /// <summary>
 6 /// DataTable转成Json
 7 /// </summary>
 8 public sealed class ToJson
 9 {
10     /// <summary>
11     /// Convert datatable to json.
12     /// </summary>
13     public static string DatatableToJson(DataTable dt)
14     {
15         StringBuilder jsonBuilder = new StringBuilder();
16         jsonBuilder.Append("[");
17         for (int i = 0; i < dt.Rows.Count; i++)
18         {
19             jsonBuilder.Append("{");
20             for (int j = 0; j < dt.Columns.Count; j++)
21             {
22                 jsonBuilder.Append("\"");
23                 jsonBuilder.Append(dt.Columns[j].ColumnName);
24                 jsonBuilder.Append("\":\"");
25                 jsonBuilder.Append(dt.Rows[i][j].ToString());
26                 jsonBuilder.Append("\",");
27             }
28             jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
29             jsonBuilder.Append("},");
30         }
31         jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
32         jsonBuilder.Append("]");
33         return jsonBuilder.ToString();
34     }
35     /// <summary>
36     /// Convert datatable to json with tablename.
37     /// </summary>
38     public static string DatatableToJson(DataTable dt, string tn)
39     {
40         StringBuilder jsonBuilder = new StringBuilder();
41         jsonBuilder.Append("{\"" + tn + "\":");
42         jsonBuilder.Append(DatatableToJson(dt));
43         jsonBuilder.Append("}");
44         return jsonBuilder.ToString();
45     }
46 }

第二步:编写客户端的页面

 1 <!doctype html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8" />
 5     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
 6     <title>UI</title>
 7     <link href="css/bootstrap.min.css" rel="stylesheet" />
 8     <!--[if lt IE 9]>
 9         <script src="js/html5.js"></script>
10     <![endif]-->
11 </head>
12 <body>
13     <div class="container">
14         <h2 class="page-header">数据服务<small>&nbsp;ASHX&WebService</small></h2>
15         <table class="table table-bordered table-striped">
16             <thead>
17                 <tr>
18                     <th>公告编号</th>
19                     <th>公告标题</th>
20                     <th>发布时间</th>
21                 </tr>
22             </thead>
23             <tbody id="bulletin"></tbody>
24         </table>
25     </div>
26     <!--脚本Scripts-->
27     <script src="js/jquery.min.js"></script>
28     <script src="js/bootstrap.min.js"></script>
29     <script src="js/modules/index.js"></script>
30 </body>
31 </html>

第三步:编写客户端与服务端连接的脚本

 1 var handlerHttp = "http://127.0.0.1:9001/DataServicesHandler.ashx?";
 2
 3 $(document).ready(function () {
 4     Init();
 5 });
 6
 7 // 数据服务ashx
 8 function Init () {
 9     var ajaxOptions = {
10         url: handlerHttp + "callback=?",
11         dataType: "jsonp",
12         success: function (data) {
13             var htmlString = "";
14             if (data) {
15                 $.each(data.Bulletin, function (index, value) {
16                     htmlString += "<tr title=‘" + value.BulletinContent + "‘>";
17                     htmlString += "<td>" + value.BulletinID + "</td>";
18                     htmlString += "<td>" + value.BulletinTitle + "</td>";
19                     htmlString += "<td>" + value.BulletinTime + "</td>";
20                     htmlString += "</tr>";
21                 });
22             }
23             $("#bulletin").html(htmlString);
24         },
25         error: function () {
26             alert("DataServicesHandler.ashx")
27         }
28     };
29     $.ajax(ajaxOptions);
30 }

通过以上简单的三大步,就能为优雅的网页提供数据支撑,从而使得用户在享受的体验下获取需要的信息,何乐而不为!

参考链接:http://www.cnblogs.com/lei2007/archive/2013/01/30/2882942.html

代码下载:DataServices.rar

时间: 2024-10-28 23:54:36

为前端提供数据的相关文章

前端协作流程

前面的话 在拿到交互原型或视觉稿以后,前端工程师要能够灵活应用前端知识技能,完成相应的功能.在实际的企业环境中,不只是有前端工程师,更多的场景和项目是通过团队多人协作完成的.作为前端工程师如何与团队中其他角色进行协作呢?本文将详细介绍前端工程师协作流程 Web系统 在介绍协作流程之前,首先简单地了解Web系统的结构 从宏观上来说,Web系统是部署在服务器上用于为web客户端提供服务的系统.不同的Web客户端根据不同的需求,发送请求到服务器上部署的Web系统上.Web系统根据需求,返回相应的结果,

前端好工具

ACE模板:http://ace.jeka.by/index.html github:https://github.com/bopoda/ace mock.js:模拟后端给前端提供数据 http://mockjs.com 原文地址:https://www.cnblogs.com/JAYIT/p/9585823.html

c# 进阶之 WebAPI

REST是设计风格而不是标准. webapi有自己的路由. webservice和wcf的协议都是soap协议,数据的序列化和反序列化都是soap的格式.而webapi是Json的数据传递 webapi的优点有哪些? (1)非常适合做http的请求,前端与webapi交互特别方便 (2)webapi更轻量因为使用的json数据来传递. (3)webapi很多时候是给前端提供数据的,因为webapi跟控制器关联的没那么紧密(若是没webapi,用mvc的模式,那么页面直接从对应的控制器获取数据),

一个简单粗暴的前后端分离方案

项目背景 刚刚参加完一个项目,背景:后端是用java,后端服务已经开发的差不多了,现在要通过web的方式对外提供服务,也就是B/S架构.后端专注做业务逻辑,不想在后端做页面渲染的事情,只向前端提供数据接口.于是协商后打算将前后端完全分离,页面上的所有数据都通过ajax向后端取,页面渲染的事情完全由前端来做.另外还有一个紧急的情况,项目要紧急上线,整个web站点的开发时间只有两周,两周啊!于是在这样的背景下,决定开始一次前后端完全分离的尝试. 之前开发都是同步渲染和异步渲染混搭的,有些东西可以有后

第一次遇到这样的事情

一.写此日志的意义: 基于我公司鼓励有话直说,我想吐吐槽,有烦恼写出来,心里就舒服多了. 我是个后知后觉,不善言辞,嘴上不会说的人,想借日志清晰一下思路. 四年了,以前一直认为技术的路上比较少这些东西,起码要等做到管理层,但还是给我遇上了.需要纪念纪念. 提醒一下各位好友:害人之心不可有,防人之心不可无.尤其要防着:打羽毛球喜欢打又短又斜角(那种刚刚过网的球):为达目的不择手段的人. 二.背景: 由于种种原因,6月底我离开了C公司去了y公司.刚进y公司的一个星期是很happy的:新的办公桌,新的

理解什么是前后端分离

HTML.CSS.JS. AJAX或Fetch. 学习一个前端的框架, React或者Vue或者Angularjs2都可以. 学会一个前端的路由框架, 如React-Router或者Vue-Router. 在学会3的基础上你肯定已经搭建好前端的开发环境了,所有和后端的交互走AJAX或者Fetch. SpringMVC 不再返回一个视图, 直接返回JSON. 前端从后端获取的所有数据都是JSON,至于怎么去更新页面, 你学会3后你肯定已经知道了. 页面跳转相关的东西你学会4后你肯定已经知道了. 既

菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样.假设每个建一个实体的话,那样实体会太多.假设分组抽象,然后继承,又不是特别有规律.鉴于这样的情况.就打算让用户自己配置要加入的字段,然后生成相应的表. 须要动态配置的部分实例: 上图仅仅是一小部分,一个一个组合起来大概有三百多.每一项相应一个实体,显然不好,就算是依照规律归归类还是有不少.于是就想到了在执行期来确定这些东西.開始有尝试过动态编译生成实体类,后来发如今数据存取上都存在问题,由于是后来生成的,所以仅仅能用反射来获取.这样

一个前后端分离方案[转载]

项目背景 背景:后端是用java,后端服务已经开发的差不多了,现在要通过web的方式对外提供服务,也就是B/S架构.后端专注做业务逻辑,不想在后端做页面渲染的事情,只向前端提供数据接口.于是协商后打算将前后端完全分离,页面上的所有数据都通过ajax向后端取,页面渲染的事情完全由前端来做.另外还有一个紧急的情况,项目要紧急上线,整个web站点的开发时间只有两周,两周啊!于是在这样的背景下,决定开始一次前后端完全分离的尝试. 之前开发都是同步渲染和异步渲染混搭的,有些东西可以有后端PHP帮你编译好,

asp.net 编写代码流程(bll contract dal)里面添加代码

代码编写流程 1.DALWebService文件夹下,处理数据获取接口 --数据库访问的代码主要在MrtmClass项目下,矿山简介和许可证信息的webservice接口是已有的 这里了解下相关业务的字段信息即可. 2.Mrs文件夹下,处理Web后端数据接口 --按顺序在model.ibll.dal.bll四个部分添加代码,model和ibll在contract后缀的项目里 这里按照前端显示需要,把要用到的字段,建立model,然后做个查询的bll接口和实现. 矿山简介和许可证信息只要有查询的接