23 //data: str,
24 data: str2, 25 success: function (response) { 26 //返回的對(duì)象數(shù)組 27 var arr = response.d; 28 //循環(huán) 29 $.each(arr, function (index, va) { 30 //得對(duì)象 31 var obj = va; 32 var str = "姓名:" + obj.Name + " 年紀(jì):" + obj.Age + " 是男人:" + obj.IsMan + " "; 33 $('#div_txt').append("第" + index + "項(xiàng)值=" + str + " "); 34 }) 35 } 36 } 37 38 $.ajax(options) 39 }) 運(yùn)行結(jié)果:
h.返回Dictionary 1 [WebMethod] 2 public System.Collections.Generic.Dictionary<string , ClassA> GetDictionary ( ) 3 { 4 //鍵必須為字符型,要不會(huì)報(bào)錯(cuò) 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 //返回的對(duì)象數(shù)組 9 var arr = response.d; 10 //循環(huán) 11 $.each(arr, function (index, va) { 12 //得對(duì)象 13 var obj = va; 14 var str = "姓名:" + obj.Name + " 年紀(jì):" + obj.Age + " 是男人:" + obj.IsMan + " "; 15 $('#div_txt').append("第" + index + "項(xiàng)值=" + str + " "); 16 }) 17 }, 18 error: function (XMLHttpRequest, textStatus, errorThrown) { 19 // 通常 textStatus 和 errorThrown 之中 20 alert(textStatus); 21 } 22 } 23 24 $.ajax(options) 25 }) 說(shuō)明:正常情況下,Dictionary Hashtable ListDictionary 這3個(gè)類型都不可以在WebService的方法中擔(dān)任參數(shù)和方法返回值,沒想到這次jquery竟然調(diào)用成功!小小驚喜發(fā)現(xiàn)! 特別提示:Dictionary的鍵值必須是字符,否則會(huì)報(bào)錯(cuò) 運(yùn)行結(jié)果:
i.返回DataSet 本文為DataSet演示了3種調(diào)用方式
返回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 + "萬(wàn)事如意" ); 12 dt.Rows.Add ( 2013 , name + "恭喜發(fā)財(cái)" ); 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), //把對(duì)象序列化為json字符串 11 success: function (result) { 12 //取回來(lái)表中的行 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 }) 運(yùn)行結(jié)果: 說(shuō)明:這種方式項(xiàng)目中必須引用Microsoft.Web.Preview.dll,并且在Web.config配置文件中增加如下節(jié)點(diǎn): 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,這里傳遞的參數(shù)采用對(duì)象形式 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 }) 說(shuō)明:由于采用的是xml格式調(diào)用,所以在傳遞參數(shù)時(shí),就采用對(duì)象的形式
返回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是方法的參數(shù)名 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 //循環(huán) 18 $.each(arr, function (index, va) { 19 //得對(duì)象 20 var obj = va; 21 var str = "姓名:" + obj.Name + " 年紀(jì):" + obj.Age + " 是男人:" + obj.IsMan + " "; 22 $('#div_txt').append("第" + index + "項(xiàng)值=" + str + " "); 23 }) 24 }, 25 error: function (XMLHttpRequest, textStatus, errorThrown) { 26 // 通常 textStatus 和 errorThrown 之中 27 alert(textStatus); 28 } 29 } 30 31 $.ajax(options) 32 }) 說(shuō)明:web服務(wù)器端我利用Newtonsoft.Json.dll里面的JsonConvert.SerializeObject方法把DataSet序列化為json字符串 jquery客戶端我利用 $.evalJSON把返回的json字符串再轉(zhuǎn)化為類 關(guān)于Newtonsoft.Json.dll可以參考:http://json./ |
|
來(lái)自: CoCO-Ebook > 《計(jì)算機(jī)IT》