JST+JSON+AJAX——使用客户端js模版代替服务端数据绑定

如何读懂CiteSpace图谱?科研小白必看的节点颜色/年轮/聚类解读手册 本文详细解析CiteSpace图谱的核心视觉元素,包括节点颜色、年轮和聚类标识,帮助科研人员准确解读数据分析结果。通过生物医学案例展示如何从图谱中识别关键文献和研究趋势,提供五步系统解读法和常见错误规避策略,助力科研小白快速掌握文献计量分析技巧。 阅读详情

本文给出一个通过组合使用JST,JSON和AJAX技术,使用客户端js模版代替服务端数据绑定的范例。很显然的,使用客户端数据绑定代替服务端数据绑定能够大大减少服务端的内存和CPU消耗,在硬件不变的情况下,大大提升服务器负载能力。

名词解释

首先,先简单介绍一下JST和JSON。都直接引用官方介绍了。

JST (JavaScript Templates)

For web application developers, the JavaScript Templates engine from TrimPath is a lightweight APL / GPL open-source component that lets you have template-based programming (like PHP/ASP/JSP) while running in a web browser.

- The JST engine is written entirely in standard JavaScript.
- It supports a productive template markup syntax very much like FreeMarker, Velocity, Smarty.
- JST is a readable alternative to manually coded massive String concatenations and major DOM/DHTML manipulations. 、

JSON (JavaScript Object Notation)

JSON is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

简单的说,JST是一个类似Velocity的模版引擎,只不过它是纯js的。而JSON是一个类似XML的数据交换语言,它使用了js语言的一个子集来定义数据,因此,对js而言,JSON格式的数据可以作为一个对象使用,甚至完全无须额外解析,也比XML体积更小,一般来说,它的序列化后大小只有XML序列化的一半,当然,它也是纯js的。

AJAX就不多说了。

范例简介及下载

本范例采用Web Application Architectures: Simple 2 Layer, Standard 3 Layer and Distributed 3 Layer一文中的Simple 2 Layer构架,只是在Web表现层使用JST,JSON和AJAX代替原来的直接使用ASP.NET数据绑定。

您可以访问https://sourceforge.net/projects/nbear/下载最新的NBear v2.0.1,其中包含了本文讨论的范例的全部源码(见zip包中的sample目录下)和所依赖的NBear框架的全部源码。(运行范例前请注意修改web.config中的TestAccessDb的数据库连接字串。)

范例分析

如果您对Simple 2 Layer构架没有概念,请先访问Web Application Architectures: Simple 2 Layer, Standard 3 Layer and Distributed 3 Layer一文中的相关介绍。

让我们先从JST开始说起。

要让我们的Web程序能够调用JST的类库,我们只需要将template.js文件包含到当前页面。该文件的最新版本可以从http://trimpath.com/project/wiki/JavaScriptTemplates下载。

首先,看看我们的,Default.aspx文件

代码 Default.aspx

在以上代码中,除了可以载入template.js的script标签,还有一句和JST相关的代码是第22行:

var result = TrimPath.parseTemplate(data.jst).process(data);

该行代码调用了一组JST类库的函数,将一个js的对象data,通过一个JST模版data.jst(一个JST模版是一段字符串模版文本)进行解析,并返回解析转换后的html内容。这个过程有点类似xml/xslt。这里的data.jst相当于xslt而data相当于xml。

Default.aspx中的其他内容也比较简单,在pageload和点击按钮时,通过调用LoadTemplateData()方法-〉Ajax.Callback()方法,执行一个Ajax回调。这里的Ajax实现,是用内置于NBear的AjaxHelper组件来实现,关于该Ajax组件的更多介绍可以参见Call Back Callback - 整合AjaxHepler到NBear一文。在本文中,您只需要了解,Ajax.Callback()方法我们可以很方便的执行一个Ajax回调,并返回一个User Control中的内容。

我想你已经猜到了,我们JSON数据和JST模版,都可以通过User Control来定义。

以页面pageload时载入的数据为例,他用到了一个AjaxTemplate:DemoData.ascx和一个JsTemplate:DemoTemplate.ascx。

代码 DemoData.ascx

代码 DemoData.ascx.cs

代码 DemoTemplate.ascx

以上比较简单,DemoData.ascx中的JSON内容是直接手打的。下面的DemoData2.ascx.cs中,您将看到如何使用JSONArray和JSONObject类以编程的方式进行JSON序列化。

代码 DemoData2.ascx

代码 DemoData2.ascx.cs

代码 DemoTemplate2.ascx

这两组范例都是比较简单的,两种方式都是个定义了一组JSON格式的数据和JST格式的页面模版。

执行页面,并点击按钮,你将看到运行效果。每次执行LoadTemplateData()方法,JSON数据和模版内容都通过AJAX回调返回,在DoBinding1函数中,参数content返回值是一个标准的组合了JST模版和JSON数据的JSON字符串,以var data = eval("(" + content + ")");的方式将JSON数据转换为一个标准的js对象实例。data将包含一个jst属性(在DemoData.ascx.cs和DemoData2.ascx.cs中构造的),包含了JST模版的内容。然后再通过JST类库中的方法进行解析这就生成我们需要的HTML。

小结

以上的范例应该还是比较简单的,我们可以看到,由于解析过程是客户端js执行的,没有服务器负担,并由于JSON序列化的效率更高,序列化后的数据大小远小于XML和HTML,也就减少了数据传输量,同时配合AJAX,整个过程对用户来说是完全透明的,也减少了非AJAX方式页面刷新带来的额外数据传递开销。

 

把收款差异从扯皮变成闭环:SAP S/4HANA Dispute Resolution 模块到底解决什么问题? 本文摘要: SAP S/4HANA的争议解决模块(Dispute Resolution)通过标准化流程管理企业应收争议,解决发票与收款差异问题。核心是创建可追踪的Dispute Case工单,明确处理角色(Processor和Manager),并与财务系统联动实现自动清账。系统支持手工/自动创建争议工单,通过动态默认值减少错误,并最终实现争议金额归零的闭环管理。文中给出制造业客户扣款的完整处理案例,并强调组织落地需统一权限与目录。最后提供ABAP代码示例展示如何通过BAPI创建争议工单。(150字) 阅读详情

相关推荐

AJAX 实现的实时监测模块

开发工具:Myeclipse7.0 服务器:Tomcat 数据库:Mysql 技术: JDBC+Servlet+Ajax 功能:定时的检测你的数据库中某个表的记录数量。 心得:通过这个小功能,认识了Ajax的核心思想 XMLHttpRequest对象

JavaScript 一些使用方法

1.jq 另一种取值方式// var val = $input.val() var val = $("#input")['val'] 2.正则表达式html模板的运用<div id="template"> <div>{{ firstName }} {{ lastName }}</div> </div> var mjson = { firstName:"lyqhn2012 ",

lyqhn2012的专栏 625

JavaScript Template JST模板引擎

Trimpath JavaScript 是不个轻量级的,基于JavaScript的,跨浏览器,采用APL/GPL开放源代码协议的,可以让你轻松进行基于模板编程方式的纯JS引擎。 它有如下的特点: 1、采用标准的JavaScript编写,支持跨浏览器 2、模板语法类似于:FreeMarker,Velocity,Smarty 3、采用简易的语言来描述大段的字串以及Dom/DHTML操作 4、可以很方便的解析XML文件格式的数据到指定模板。 采用该引擎,可以让它来完全处理View方面的事情,服务端Module直接输出Data就可以。让你的MVC模式连成一体,而且由于View由浏览器来 处理,大大减少了服务器的负担,用来构建Ajax技术的网络信息系统应用是一个非常好的选择。下面将通过翻译该站的文章来给大家介绍这个JST引擎的使 用。

Jst知识点个人总结

个人理解下的总结,仅供参考 判断是否是数组? Array.isArray(data) 案例 // 判断data是否是数组,如果不是数组,则从指定的分隔符','处将字符串分割开,返回字符串数组 location: Array.isArray(data) ? data: data.split(','), 将字符创分割并返回字符串数组 // data: "12, 13" // 将字符串data,以','分割符分割,并返回字符串数组,为['12', '13'] data.split(',') ...

yh8899abc的博客 889

JST简介

JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer? Pages Standard Tag Library)的诞生。作者:丁令(http:///www.DingL.com/)JSTL简介JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在

oldtown的专栏 2813

JS 模板引擎之JST模板

项目中有用到JST模板引擎,于是抽个时间出来,整理了下关于JST模板引擎的相关内容。 试想一个场景,当点击页面上列表的翻页按钮后,通过异步请求获得下一页的列表数据并在页面上显示出来。传统的JS做法是编译返回的数据后,依次遍历列表对象,并组装html代码和数据,最终生成总字符串,然后塞到指定的列表容器里。当数据比较庞大时,这种处理方式非常低效率。更加高效且稳定的方法就是使用JST模板引擎来完成。 ...

weixin_30566111的博客 524

2.Jst基础语法之变量相关

一.js当中的变量 在js当中变量非常重要,变量指的是在程序中保存数据的一个容器 变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据 也就是说,我们向内存中存储了一个数据,然后要给这个数据起一个名字,为了是我们以后再次找到他 1.定义变量及赋值 语法:var 变量名 = 值 // 定义一个变量 var num; // 给一个变量赋值 num = 100; // 定义一个变量的同时给其赋值 var num2 = 200; 2.变量名注意事项注意: 1. 一个变量名只能

常蓬的博客 597

(收藏)《博客园精华集》AJAX与ASP.NET AJAX部分

AJAX与ASP.NET AJAX部分 ASP.NET Ajax =》WCF(.NET 3.5 Beta 2,VS2005) 作者: dudu Ajax基石脚本异步并发调用参数传递 作者: birdshome 扩展JavaScript的时候,千万要保留其原来的所有功能 作者...

233

JST:轻量级和快速的 javascript 模板引擎

JST 轻量级和快速的 javascript 模板引擎 入门 下载或。 在您的网页中: < script src =" src/JST.js " > </ script > < script > var data = { name : 'aaron' , hobbies : [ 'snooker' , 'swimming' , 'LOL' , 'dota' ] ; } ; var tpl = 'Folloing list <%=name%>\'s hobbies!<ul>' + '<%var i = -1, item;while((item=hobbies[++i])){%>' + '<li><%=i%>. <%=item%></li>' + '</ul>' ; JST . cache ( 't-1' , tpl ) ; var templateString = JST

精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果

以下是包同学导给我的清单。老赵的第二轮把关很严,杀了几乎99%的文章。不过似乎有少部分并没有经过我的手,可能是其他同学转过来的吧。第三轮老赵依旧会严格把关,肯定也会杀更多(包括通过其他同学第二轮的)文章。请大家监督,有疑问请及时告诉老赵。 AJAX与ASP.NET AJAX部分 AS...

chuifuhuo6864的博客 195

jstAPI.ajax

简单封装jQuery.ajax接口 API ajax 发送Ajax请求, 自动检测跨域访问 参数conf: loading: {boolean} 是否显示Loading loadingContainer: {jQuery} Loading-cover覆盖的区域 done: {Function} success/error处理完成后调用 其它参数参考jQuery.ajax jsonAja

留不住的青春 517

JSP EL表达式和JST标准标签库详解

EL 全名为Expression Language。 主要作用:   1、获取数据     EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)   2、执行运算     利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在...

qq_43122746的博客 905

使用JSTL标签fmt格式化字符串型日期

jsp页面需引入fmt标签: 使用: ---将字符串型日期转换为日期型 ---对日期进行格式化

caixiajia的专栏 1万+

goahead的asp和jst

能进行动态网页的不是asp而是jst, 当前版本的4.1.3

weixin_45553150的博客 433

jQuery(JS库) | 一文带你掌握jQuery的使用

jQuery(JS库) | 一文带你掌握jQuery的使用

m0_61933976的博客 1万+

cad二级减速器图

二级减速器cad平面图

上一篇: Web Application Architectures: Simple 2 Layer, Standard 3 Layer and Distributed 3 Layer
下一篇: NBear中文用户手册发布
teddyma
博客等级 码龄25年 5粉丝 187原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值