jQuery内置的AJAX功能和JSON的使用实例


Posted in Javascript onJuly 27, 2014

通过jQuery内置的AJAX功能,直接访问后台获得JSON格式的数据,然后通过jQuer把数据绑定到事先设计好的html模板上,直接在页面上显示。
我们先来看一下html模板:

<table id="datas" border="1" cellspacing="0" style="border-collapse: collapse">
<tr>
<th>
订单ID</th>
<th>
客户ID</th>
<th>
雇员ID</th>
<th>
订购日期</th>
<th>
发货日期</th>
<th>
货主名称</th>
<th>
货主地址</th>
<th>
货主城市</th>
<th>
更多信息</th>
</tr>
<tr id="template">
<td id="OrderID">
</td>
<td id="CustomerID">
</td>
<td id="EmployeeID">
</td>
<td id="OrderDate">
</td>
<td id="ShippedDate">
</td>
<td id="ShippedName">
</td>
<td id="ShippedAddress">
</td>
<td id="ShippedCity">
</td>
<td id="more">
</td>
</tr>
</table>

一定要注意的就是里面所有的id属性,这个是一个关键。再来看一下AJAX请求和绑定数据的代码

$.ajax({
type: "get",//使用get方法访问后台
dataType: "json",//返回json格式的数据
url: "BackHandler.ashx",//要访问的后台地址
data: "pageIndex=" + pageIndex,//要发送的数据
complete :function(){$("#load").hide();},//AJAX请求完成时隐藏loading提示
success: function(msg){//msg为返回的数据,在这里做数据绑定
var data = msg.table;
$.each(data, function(i, n){
var row = $("#template").clone();
row.find("#OrderID").text(n.订单ID);
row.find("#CustomerID").text(n.客户ID);
row.find("#EmployeeID").text(n.雇员ID);
row.find("#OrderDate").text(ChangeDate(n.订购日期));
if(n.发货日期!== undefined) row.find("#ShippedDate").text(ChangeDate(n.发货日期));
row.find("#ShippedName").text(n.货主名称);
row.find("#ShippedAddress").text(n.货主地址);
row.find("#ShippedCity").text(n.货主城市);
row.find("#more").html("<a href=OrderInfo.aspx?id=" + n.订单ID + "&pageindex="+pageIndex+"> More</a>"); 
row.attr("id","ready");//改变绑定好数据的行的id
row.appendTo("#datas");//添加到模板的容器中
});

这个是jQuery的AJAX方法,返回数据并不复杂,主要说明一下怎么把数据按模板的定义显示到到页面上。首先是这个“var row = $("#template").clone();”先把模板复制一份,接下来row.find("#OrderID").text(n.订单ID);,表示找到id=OrderID的标记,设置它的innerText为相应的数据,当然也可以设置为html格式的数据。或者是通过外部的函数把数据转换成需要的格式,比如这里row.find("#OrderDate").text(ChangeDate(n.订购日期));有点服务器控件做模板绑定数据的感觉。
所有的这些,都是放在一个静态的页面里,只通过AJAX方法从后台获取数据,所有html代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test1</title>

<script language="javascript" type="text/javascript" src="js/jquery-latest.pack.js"></script>

<script language="javascript" type="text/javascript" src="js/PageDate.js"></script>

</head>
<body>
<div>
 <div>
<br />
<input id="first" type="button" value=" << " /><input id="previous" type="button"
value=" < " /><input id="next" type="button" value=" > " /><input id="last" type="button"
value=" >> " />
 <span id="pageinfo"></span>
<table id="datas" border="1" cellspacing="0" style="border-collapse: collapse">
<tr>
<th>
订单ID</th>
<th>
客户ID</th>
<th>
雇员ID</th>
<th>
订购日期</th>
<th>
发货日期</th>
<th>
货主名称</th>
<th>
货主地址</th>
<th>
货主城市</th>
<th>
更多信息</th>
</tr>
<tr id="template">
<td id="OrderID">
</td>
<td id="CustomerID">
</td>
<td id="EmployeeID">
</td>
<td id="OrderDate">
</td>
<td id="ShippedDate">
</td>
<td id="ShippedName">
</td>
<td id="ShippedAddress">
</td>
<td id="ShippedCity">
</td>
<td id="more">
</td>
</tr>
</table>
</div>
<div id="load" style="left: 0px; position: absolute; top: 0px; background-color: red">
LOADING....
</div>
<input type="hidden" id="pagecount" />
</div>
</body>
</html>

PageData.js就是包括上面AJAX请求和绑定数据代码的js,整个页面连form都不用,这样做有什么好处呢。再看下面一个模板

<ul id="datas">
<li id="template">
<span id="OrderID">
fsdfasdf
</span>
<span id="CustomerID">
</span>
<span id="EmployeeID">
</span>
<span id="OrderDate">
</span>
<span id="ShippedDate">
</span>
<span id="ShippedName">
</span>
<span id="ShippedAddress">
</span>
<span id="ShippedCity">
</span>
<span id="more">
</span>
</li>
</ul>

还 是要注意id属性。大家看到这里应该明白了,不管用什么样的表现形式,只要id属性相同,就可以把数据绑定到对应的位置。这样的话,我们这些做程序的就不 会因为美工的修改而修改代码了,而且美工也只要做出html就可以了,不需要为服务器控件做模板(不过我还没遇到过这样的美工,都是美工设计好了我来改成 服务器控件的模板)。

再简单说一下AJAX请求的后台,用的是Access的Northwind数据库,把订单表放到DataTable里,然后通过DataTable2JSON转化成JSON数据格式传回来就完了,不过后台用了一些分页和缓存的方法,希望对初学者有一些帮助。

Javascript 相关文章推荐
JS定义回车事件(实现代码)
Jul 08 Javascript
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
Dec 14 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
May 16 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
jQuery插件实现图片轮播特效
Jun 16 Javascript
jquery常用的12个小功能
Jul 22 Javascript
深入理解requestAnimationFrame的动画循环
Sep 20 Javascript
js实现自动轮换选项卡
Jan 13 Javascript
AngularJS 单选框及多选框的双向动态绑定
Apr 20 Javascript
详解ES6中的代理模式——Proxy
Jan 08 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
微信小程序实现聊天室功能
Jun 14 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 #Javascript
jquery JSON的解析方式示例介绍
Jul 27 #Javascript
jQuery提交多个表单的小技巧
Jul 27 #Javascript
用javascript对一个json数组深度赋值示例
Jul 27 #Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 #Javascript
多个$(document).ready()的执行顺序实例分析
Jul 26 #Javascript
jquery 取子节点及当前节点属性值
Jul 25 #Javascript
You might like
VOLVO车载收音机
2021/03/02 无线电
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
分享几个超级震憾的图片特效
2012/01/08 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
跟老齐学Python之变量和参数
2014/10/10 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
使用Python3内置文档高效学习以及官方中文文档
2019/05/19 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
python的链表基础知识点
2020/09/13 Python
浅析python 通⽤爬⾍和聚焦爬⾍
2020/09/28 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
村委会换届选举方案
2014/05/03 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
离婚财产处理协议书
2014/09/30 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书
学习《中小学教师职业道德规范》心得体会
2016/01/18 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题