分享

Jquery利用ajax调用asp.net webservice的各种数据类型(总结篇)

 CoCO-Ebook 2013-09-25
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./

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多