本着这原则,我把最近工作中遇到的jquery利用ajax调用web服务的各种数据类型做了一个总结!
本文章没有什么高难度技术,就是记录一下,汇总一下,以便以后需要时查看!
DataSet这样的表数据类型(这种类型数据,本文提供了3种调用方式)
Microsoft.Web.Preview.dll
web服务要想被ajax成功调用,请勿忘记标记上属性:[System.Web.Script.Services.ScriptService]
public string HelloWorld ( )
return "Hello World 我来啦!";
$("#ButtonNO").click(function () {
url: "WS.asmx/HelloWorld",
contentType: "application/json; charset=utf-8",
success: function (response) {
$("#div_txt").text(response.d);
说明:这是一种最基本的调用方式,由于调用数据类型设置为json,所以返回数据在response.d中
2 public string Get2 ( string value3 , int year )
4 return string.Format ( "祝福您在{0}年里:{1}" , year , value3 );
1 $("#Button2").click(function () {
4 var par = { value3: "心想事成,万事如意", year: 2012 };
7 var json_str = $.toJSON(par);
12 contentType: "application/json; charset=utf-8",
14 //由于调用类型是基于json的,所以这里传递的参数格式必须严格遵守json字符串规定
16 success: function (response) {
17 $("#div_txt").text(response.d);
说明:由于调用数据类型设置为json,所以传递给web服务的参数必须严格遵守json字符串格式,否则有可能会出错
$.toJSON是引用jquery.json-2.3.min.js中的一个方法,它是把一个js类转化为json字符串
参考:https://code.google.com/p/jquery-json/
2 public List<double> Get_Array ( int i )
4 List<double> list = new List<double> ( );
6 for ( int j = 0 ; j < 3 ; j++ )
8 Random ra = new Random ( );
10 double d = ra.NextDouble ( );
1 $("#Buttonarr").click(function () {
4 var json_str = $.toJSON(par);
7 url: "WS.asmx/Get_Array",
9 contentType: "application/json; charset=utf-8",
12 success: function (response) {
13 $.each(response.d, function (index, va) {
14 $('#div_txt').append("第" + index + "项值=" + va + " ");
说明:由于返回的是数组,所以利用$.each进行循环逐一取值
2 public ClassA GetClass ( )
2 $("#Buttonclass").click(function () {
4 url: "WS.asmx/GetClass",
5 contentType: "application/json; charset=utf-8",
8 //GetClass方法没有参数,所以data可以不设置
10 success: function (response) {
12 $("#div_txt").text("姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ");
说明:返回的值在js中也是一个类,所以用其属性可以访问到值
2 public List<ClassA> GetClassArray ( )
4 List<ClassA> list = new List<ClassA> ( );
1 $("#Button_classs_list").click(function () {
3 url: "WS.asmx/GetClassArray",
4 contentType: "application/json; charset=utf-8",
7 success: function (response) {
11 $.each(arr, function (index, va) {
14 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ";
15 $('#div_txt').append("第" + index + "项值=" + str + " ");
2 public ClassA Set_Class ( ClassA ca )
6 Name = ca.Name + "名字变啦" ,
1 $("#Button_setclass").click(function () {
3 //第1种是自己用字符串拼接(例如下面的变量str)
4 //第2种是先定义js类,然后用$.toJSON方法转化为就是字符串(例如下面的变量str2)
7 var str = '{"ca":{"Name":"小高","Age":28,"IsMan":true }}';
9 var obj1 = { Name: "小高", Age: 28, IsMan: true };
10 var cl = new Object();
13 var str2 = $.toJSON(cl);
16 url: "WS.asmx/Set_Class",
17 contentType: "application/json; charset=utf-8",
23 success: function (response) {
25 $("#div_txt").text("姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ");
说明: 上面例题,我演示了2种参数形成方式,个人喜欢第2种方式,不喜欢那种字符串拼接的方式
2 public List<ClassA> Set_ClassArray ( List<ClassA> ClassAlist )
4 List<ClassA> li = new List<ClassA> ( );
6 foreach ( ClassA item in ClassAlist )
8 li.Add ( new ClassA ( )
10 Name = item.Name + "名字变啦,并且长大10岁!" ,
1 $("#Button_setclassarr").click(function () {
3 var str = '{"ClassAlist":[{"Name":"小高","Age":28,"IsMan":true },{"Name":"小皓","Age":16,"IsMan":false }]}';
5 var obj1 = { Name: "小高", Age: 28, IsMan: true };
6 var obj2 = { Name: "小皓", Age: 16, IsMan: false };
12 var cl = new Object();
15 var str2 = $.toJSON(cl);
18 url: "WS.asmx/Set_ClassArray",
19 contentType: "application/json; charset=utf-8",
25 success: function (response) {
29 $.each(arr, function (index, va) {
32 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ";
33 $('#div_txt').append("第" + index + "项值=" + str + " ");
2 public System.Collections.Generic.Dictionary<string , ClassA> GetDictionary ( )
5 Dictionary<string , ClassA> list = new Dictionary<string , ClassA> ( );
7 list.Add ( "a" , new ClassA ( )
14 list.Add ( "b" , new ClassA ( )
1 $("#Button_Dictionary").click(function () {
3 url: "WS.asmx/GetDictionary",
4 contentType: "application/json; charset=utf-8",
7 success: function (response) {
11 $.each(arr, function (index, va) {
14 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ";
15 $('#div_txt').append("第" + index + "项值=" + str + " ");
18 error: function (XMLHttpRequest, textStatus, errorThrown) {
19 // 通常 textStatus 和 errorThrown 之中
说明:正常情况下,Dictionary Hashtable ListDictionary 这3个类型都不可以在WebService的方法中担任参数和方法返回值,没想到这次jquery竟然调用成功!小小惊喜发现!
特别提示:Dictionary的键值必须是字符,否则会报错
2 public DataSet GetDataSet ( string name )
4 DataSet ds = new DataSet ( );
6 DataTable dt = new DataTable ( );
7 dt.Columns.Add ( "Year" , Type.GetType ( "System.Int32" ) );
8 dt.Columns.Add ( "Value" , Type.GetType ( "System.String" ) );
10 dt.Rows.Add ( 2011 , name + "新年快乐" );
11 dt.Rows.Add ( 2012 , name + "万事如意" );
12 dt.Rows.Add ( 2013 , name + "恭喜发财" );
1 //返回DataSet(第1种方式,json)
2 $("#Buttonds_json").click(function () {
3 var par = { name: "东莞人民" };
6 contentType: "application/json; charset=utf-8",
8 url: "WS.asmx/GetDataSet",
10 data: $.toJSON(par), //把对象序列化为json字符串
11 success: function (result) {
13 var rows = result.d.tables[0].rows;
15 for (var rowIndex = 0; rowIndex < rows.length; ++rowIndex) {
16 $("#table1").append("<tr><td>" + rows[rowIndex]["Year"] + "</td><td>" + rows[rowIndex]["Value"] + "</td></tr>");
19 error: function (XMLHttpRequest, textStatus, errorThrown) {
20 // 通常 textStatus 和 errorThrown 之中
说明:这种方式项目中必须引用Microsoft.Web.Preview.dll,并且在Web.config配置文件中增加如下节点:
1 <system.web.extensions>
6 <add name="DataSetConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter" />
7 <add name="DataRowConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter" />
8 <add name="DataTableConverter" type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter" />
13 </system.web.extensions>
2 $("#Buttonds_xml").click(function () {
3 var par = { name: "东莞人民" };
6 url: "WS.asmx/GetDataSet",
10 //由于不是json,这里传递的参数采用对象形式
12 success: function (result) {
13 $(result).find("Table1").each(function () {
14 $("#table1").append("<tr><td>" + $(this).find("Year").text() + "</td><td>" + $(this).find("Value").text() + "</td></tr>");
17 error: function (XMLHttpRequest, textStatus, errorThrown) {
18 // 通常 textStatus 和 errorThrown 之中
说明:由于采用的是xml格式调用,所以在传递参数时,就采用对象的形式
public string GetDataSetString ( List<ClassA> ClassA_Lists )
DataSet ds = new DataSet ( );
DataTable dt = new DataTable ( );
dt.Columns.Add ( "Name" , Type.GetType ( "System.String" ) );
dt.Columns.Add ( "Age" , Type.GetType ( "System.Int32" ) );
dt.Columns.Add ( "IsMan" , Type.GetType ( "System.Boolean" ) );
foreach ( ClassA item in ClassA_Lists )
dt.Rows.Add ( item.Name , item.Age , item.IsMan );
string str = JsonConvert.SerializeObject ( ds );
1 //返回DataSet(第3种方式,string)
2 $("#ButtonDS_string").click(function () {
4 var str = '{"ClassA_Lists":[{"Name":"邓伟","Age":28,"IsMan":true },{"Name":"乐乐","Age":16,"IsMan":false }]}';
7 url: "WS.asmx/GetDataSetString",
9 contentType: "application/json; charset=utf-8",
12 success: function (response) {
13 var obj = $.evalJSON(response.d);
18 $.each(arr, function (index, va) {
21 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " ";
22 $('#div_txt').append("第" + index + "项值=" + str + " ");
25 error: function (XMLHttpRequest, textStatus, errorThrown) {
26 // 通常 textStatus 和 errorThrown 之中
说明:web服务器端我利用Newtonsoft.Json.dll里面的JsonConvert.SerializeObject方法把DataSet序列化为json字符串
jquery客户端我利用 $.evalJSON把返回的json字符串再转化为类
关于Newtonsoft.Json.dll可以参考:http://json.codeplex.com/
A.Sql Server2005 Transact-SQL 新兵器学习
FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统((Flex,Fms3联合开发))<视频聊天,会议开发实例8>
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列 化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
希望上面提到的知识对您有所提示,同时欢迎交流和指正
出处:http://www.cnblogs.com/aierong
贴子以"现状"提供且没有任何担保,同时也没有授予任何权利!
原创技术文章和心得,转载注明出处!这也是对原创者的尊重!
本文转自aierong博客园博客,原文链接:http://www.cnblogs.com/aierong/archive/2012/10/13/jqueryDataSetDataTablewebServicejsonajaxxml.html,如需转载请自行联系原作者