通过Jquery遍历Json的两种数据结构的实现代码


Posted in Javascript onJanuary 19, 2011

在ajax交互中,我们从服务器端返回的数据类型有xml,html,script,json,jsonp,text,本文以json为例,讲述了在前台如何利用jquery遍历json的两种数据结构:“名称/值”对的集合,值的有序列表,以及值的有序列表里面包含“名称/值”对的集合,在服务器端,我们采用的Json.NET来序列化arraylist,hashTable,list<>等数据结构。
在开始之前,我们需要下载Json.net,下载完成后,在网站中添加引用,打开下载的文件夹,如果是.net2.0以上的版本,使用DoNet文件夹下的Newtonsoft.Json.dll,如果是2.0的版本,使用DotNet20文件下的Newtonsoft.Json.dll,然后在使用的页面导入其命名空间 using Newtonsoft.Json;
准备工作完毕后,下面开始演示,首先添加webService文件 命名为ProductService.asmx,然后取消对[System.Web.Script.Services.ScriptService] 的注释。
1、遍历 “名称/值”对的集合
ProductService.asmx 添加 getProductInfoToJson方法

[WebMethod] 
public string getProductInfoToJson(int productID) 
{ 
SQLCMD = new SqlCommand("select id,name,price from dbo.productTest where id=@id", SQLConnect); 
SQLCMD.CommandType = System.Data.CommandType.Text; 
SQLCMD.Parameters.AddWithValue("@id", productID); 
SQLConnect.Open(); 
SqlDataReader reader = SQLCMD.ExecuteReader(); 
Hashtable HTresult = new Hashtable(); 
while (reader.Read()) 
{ 
HTresult.Add("id", reader["id"]); 
HTresult.Add("name", reader["name"]); 
HTresult.Add("price", reader["price"]); 
} 
reader.Close(); 
SQLConnect.Close(); 
return JsonConvert.SerializeObject(HTresult); 
}

前台
$("#ShowInfo").click(function () { 
var selectValue = $("#DropDownListCourseID").val(); 
$.ajax({ 
type: "POST", 
url: "ProductService.asmx/getProductInfoToJson", 
data: "{productID:" + selectValue + "}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function (msg) { 
var result = jQuery.parseJSON(msg.d); 
$("#resultInfo").append(result.id + result.name + result.price+"<br/>"); 
} 
}); 
});

2、遍历 值的有序列表
ProductService.asmx 添加 GetProductList方法 
[WebMethod] 
public string GetProductList(string KeyWord) { 
SQLCMD = new SqlCommand("getProductList", SQLConnect); 
SQLCMD.CommandType = CommandType.StoredProcedure; 
SQLCMD.Parameters.Add(new SqlParameter("@nameKeyWords", SqlDbType.NVarChar, 30)); 
SQLCMD.Parameters["@nameKeyWords"].Value = KeyWord; 
SQLConnect.Open(); 
SqlDataReader reader = SQLCMD.ExecuteReader(); 
ArrayList ProductList = new ArrayList(); 
while (reader.Read()) 
{ 
ProductList.Add(reader["name"].ToString()); 
} 
reader.Close(); 
SQLConnect.Close(); 
if (ProductList.Count > 0) 
{ 
return JsonConvert.SerializeObject(ProductList); 
} 
else 
{ 
return ""; 
} 
}

前台:
var suggestList = $('<ul class="autocomplete"</ul>').hide().insertAfter("#search #search-text"); 
$("#search-text").keyup(function () { 
var textString = "{KeyWord:'" + $("#search #search-text").attr("value") + "'}" 
$.ajax({ 
type: "POST", 
url: "ProductService.asmx/GetProductList", 
data: textString, 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function (data) { 
suggestList.empty(); 
var objData = jQuery.parseJSON(data.d); 
$.each(objData, function (index, term) { 
$("<li></li>").text(term).appendTo(suggestList); 
}); 
suggestList.show(); 
} 
}); 
});

3、遍历 值的有序列表里面包含“名称/值”对的集合
ProductService.asmx 添加 GetBrandNameByKeyword方法 
[WebMethod] 
public string GetBrandNameByKeyword(string Keyword) 
{ 
SQLCMD = new SqlCommand("BrandInfo_Get_BrandName_UserInputKeyWord", SQLConnect); 
SQLCMD.CommandType = CommandType.StoredProcedure; 
SQLCMD.Parameters.Add(new SqlParameter("@KeyWord",SqlDbType.NVarChar,10)); 
SQLCMD.Parameters["@KeyWord"].Value = Keyword; 
Hashtable BrandNameInfo; 
List<Hashtable> BrandNameInfoCollection = new List<Hashtable>(); 
SQLConnect.Open(); 
using (SqlDataReader reader = SQLCMD.ExecuteReader()) 
{ 
if (reader.HasRows) 
{ 
while (reader.Read()) 
{ 
BrandNameInfo = new Hashtable(); 
BrandNameInfo.Add("BrandName", reader["BrandName"].ToString()); 
BrandNameInfo.Add("BrandChineseName", reader["BrandChineseName"].ToString()); 
BrandNameInfo.Add("nameAbbreviation", reader["nameAbbreviation"].ToString()); 
BrandNameInfoCollection.Add(BrandNameInfo); 
} 
SQLConnect.Close(); 
return JsonConvert.SerializeObject(BrandNameInfoCollection); 
} 
else 
{ 
SQLConnect.Close(); 
return null; 
} 
} 
}

前台
$.ajax({ 
type: "POST", 
url: "ProductService.asmx/GetReceiverAddressInfo", 
data: "{}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function (msg) { 
var resultCollection = jQuery.parseJSON(msg.d); 
$.each(resultCollection, function (index, item) { 
var AddressInfo = [ 
'<input type="radio" name="ReceiveAddress" class="address" value="', item.id, '"/> <label class="vtip" title="<font size=3><b>收件人:</b> ', item.ReceiverName, '</br><b>联系号码:</b> ', item.ReceiverPhoneNo, '</br><b>详细地址:</b> ', item.DetailsAddress, '</font>">', item.NoticeWords, '</label></br>' 
].join(''); 
}); 
} 
});

在1.41中,jquery添加了 jQuery.parseJSON( json ) 的方法,该方法的定义是Takes a well-formed JSON string and returns the resulting JavaScript object. 就是接受一个格式良好的JSON字符串,返回一个Javascript对象。
这大大方便了我们在前台对服务器端生成的Json字符串的处理.
好了,关于Jquery遍历Json两种数据结构的介绍就到这里
Javascript 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
Oct 29 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
Dec 28 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
Apr 30 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
vue中的 $slot 获取插槽的节点实例
Nov 12 Javascript
JS实现简易计算器
Feb 14 Javascript
JQuery动态给table添加、删除行 改进版
Jan 19 #Javascript
jQuery 1.5最新版本的改进细节分析
Jan 19 #Javascript
基于Jquery与WebMethod投票功能实现代码
Jan 19 #Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
Jan 19 #Javascript
Jquery插件 easyUI属性汇总
Jan 19 #Javascript
jquery 圆形旋转图片滚动切换效果
Jan 19 #Javascript
Javascript调用C#代码
Jan 17 #Javascript
You might like
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php与flash as3 socket通信传送文件实现代码
2014/08/16 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
PHP之认识(二)关于Traits的用法详解
2019/04/11 PHP
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
Django中的ajax请求
2018/10/19 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python多线程抽象编程模型详解
2019/03/20 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
opencv实现简单人脸识别
2021/02/19 Python
Python的缺点和劣势分析
2019/11/19 Python
python实现双色球随机选号
2020/01/01 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
html5 offlline 缓存使用示例
2013/06/24 HTML / CSS
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
中国梦的演讲稿
2014/01/08 职场文书
心理健康教育制度
2014/01/27 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
2014年变电站工作总结
2014/12/19 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书