23 //data: str,
24 data: str2, 25 success: function (response) { 26 //返回的对象数组 27 var arr = response.d; 28 //循环 29 $.each(arr, function (index, va) { 30 //得对象 31 var obj = va; 32 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " "; 33 $('#div_txt').append("第" + index + "项值=" + str + " "); 34 }) 35 } 36 } 37 38 $.ajax(options) 39 }) 运行结果:
h.返回Dictionary 1 [WebMethod] 2 public System.Collections.Generic.Dictionary<string , ClassA> GetDictionary ( ) 3 { 4 //键必须为字符型,要不会报错 5 Dictionary<string , ClassA> list = new Dictionary<string , ClassA> ( ); 6 7 list.Add ( "a" , new ClassA ( ) 8 { 9 Name = "lele" , 10 Age = 18 , 11 IsMan = false 12 } ); 13 14 list.Add ( "b" , new ClassA ( ) 15 { 16 Name = "王二" , 17 Age = 28 , 18 IsMan = true 19 } ); 20 21 return list; 22 } 1 $("#Button_Dictionary").click(function () { 2 var options = { 3 url: "WS.asmx/GetDictionary", 4 contentType: "application/json; charset=utf-8", 5 type: "POST", 6 dataType: "json", 7 success: function (response) { 8 //返回的对象数组 9 var arr = response.d; 10 //循环 11 $.each(arr, function (index, va) { 12 //得对象 13 var obj = va; 14 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " "; 15 $('#div_txt').append("第" + index + "项值=" + str + " "); 16 }) 17 }, 18 error: function (XMLHttpRequest, textStatus, errorThrown) { 19 // 通常 textStatus 和 errorThrown 之中 20 alert(textStatus); 21 } 22 } 23 24 $.ajax(options) 25 }) 说明:正常情况下,Dictionary Hashtable ListDictionary 这3个类型都不可以在WebService的方法中担任参数和方法返回值,没想到这次jquery竟然调用成功!小小惊喜发现! 特别提示:Dictionary的键值必须是字符,否则会报错 运行结果:
i.返回DataSet 本文为DataSet演示了3种调用方式
返回DataSet第1种方式:
1 [WebMethod] 2 public DataSet GetDataSet ( string name ) 3 { 4 DataSet ds = new DataSet ( ); 5 6 DataTable dt = new DataTable ( ); 7 dt.Columns.Add ( "Year" , Type.GetType ( "System.Int32" ) ); 8 dt.Columns.Add ( "Value" , Type.GetType ( "System.String" ) ); 9 10 dt.Rows.Add ( 2011 , name + "新年快乐" ); 11 dt.Rows.Add ( 2012 , name + "万事如意" ); 12 dt.Rows.Add ( 2013 , name + "恭喜发财" ); 13 14 ds.Tables.Add ( dt ); 15 16 return ds; 17 }
1 //返回DataSet(第1种方式,json) 2 $("#Buttonds_json").click(function () { 3 var par = { name: "东莞人民" }; 4 5 var options = { 6 contentType: "application/json; charset=utf-8", 7 dataType: "json", 8 url: "WS.asmx/GetDataSet", 9 type: "POST", 10 data: $.toJSON(par), //把对象序列化为json字符串 11 success: function (result) { 12 //取回来表中的行 13 var rows = result.d.tables[0].rows; 14 15 for (var rowIndex = 0; rowIndex < rows.length; ++rowIndex) { 16 $("#table1").append("<tr><td>" + rows[rowIndex]["Year"] + "</td><td>" + rows[rowIndex]["Value"] + "</td></tr>"); 17 } 18 }, 19 error: function (XMLHttpRequest, textStatus, errorThrown) { 20 // 通常 textStatus 和 errorThrown 之中 21 alert(textStatus); 22 } 23 } 24 25 $.ajax(options) 26 }) 运行结果: 说明:这种方式项目中必须引用Microsoft.Web.Preview.dll,并且在Web.config配置文件中增加如下节点: 1 <system.web.extensions> 2 <scripting> 3 <webServices> 4 <jsonSerialization> 5 <converters> 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" /> 9 </converters> 10 </jsonSerialization> 11 </webServices> 12 </scripting> 13 </system.web.extensions>
返回DataSet第2种方式: 1 //返回DataSet(第2种方式,xml) 2 $("#Buttonds_xml").click(function () { 3 var par = { name: "东莞人民" }; 4 5 var options = { 6 url: "WS.asmx/GetDataSet", 7 type: "POST", 8 //返回的类型为XML 9 dataType: 'xml', 10 //由于不是json,这里传递的参数采用对象形式 11 data: par, 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>"); 15 }) 16 }, 17 error: function (XMLHttpRequest, textStatus, errorThrown) { 18 // 通常 textStatus 和 errorThrown 之中 19 alert(textStatus); 20 } 21 } 22 23 $.ajax(options) 24 }) 说明:由于采用的是xml格式调用,所以在传递参数时,就采用对象的形式
返回DataSet第3种方式: [WebMethod] 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 ); } ds.Tables.Add ( dt ); string str = JsonConvert.SerializeObject ( ds ); return str; }
1 //返回DataSet(第3种方式,string) 2 $("#ButtonDS_string").click(function () { 3 //ClassA_Lists是方法的参数名 4 var str = '{"ClassA_Lists":[{"Name":"邓伟","Age":28,"IsMan":true },{"Name":"乐乐","Age":16,"IsMan":false }]}'; 5 6 var options = { 7 url: "WS.asmx/GetDataSetString", 8 type: "POST", 9 contentType: "application/json; charset=utf-8", 10 dataType: "json", 11 data: str, 12 success: function (response) { 13 var obj = $.evalJSON(response.d); 14 15 var arr = obj.Table1; 16 17 //循环 18 $.each(arr, function (index, va) { 19 //得对象 20 var obj = va; 21 var str = "姓名:" + obj.Name + " 年纪:" + obj.Age + " 是男人:" + obj.IsMan + " "; 22 $('#div_txt').append("第" + index + "项值=" + str + " "); 23 }) 24 }, 25 error: function (XMLHttpRequest, textStatus, errorThrown) { 26 // 通常 textStatus 和 errorThrown 之中 27 alert(textStatus); 28 } 29 } 30 31 $.ajax(options) 32 }) 说明:web服务器端我利用Newtonsoft.Json.dll里面的JsonConvert.SerializeObject方法把DataSet序列化为json字符串 jquery客户端我利用 $.evalJSON把返回的json字符串再转化为类 关于Newtonsoft.Json.dll可以参考:http://json./ |
|
来自: CoCO-Ebook > 《计算机IT》