`
joaquinaimar
  • 浏览: 2283 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论
阅读更多
Jquery作为一款优秀的JS框架,简单易用的特性就不必说了。在实际的开发过程中,使用JQ的AJAX函数调用WebService

的接口实现AJAX的功能也成了一种比较普遍的技术手段了。WebService接口的实现,通常都是由OOP语言实现的。所以

在WebService的接口函数中,难免可能会遇到除了简单数据类型的复杂数据类型。复杂的数据的数据类型机有可能是

WebService接口中的参数,也有可能是WebService的返回值。本文所叙述的要点为:

1、对于WebService接口复杂类型的参数,JQ调用的时候传入的JSON数据应该如何表示。?

2、JQ对WebService调用获取JSON数据类型。

3、JQ调用的时对Webservice返回的复杂数据类型有什么样要求。?

环境:JQ版本:1.4.2、VS2008 SP1。

测试一:对于WebService简单参数类型:


01 WebService接口函数代码如下:
02
03     [WebMethod(Description = "测试方法")]
04     public string ProcessPersonalInfo(Person person)
05     {
06         return person.Name + person.Tel;
07     }
08     JQ调用代码如下:
09
10         $.ajax({
11
12         type: "POST",
13
14         url: "WebService1.asmx/GetString",
15
16         dataType: "json",
17
18         contentType: "application/json; charset=utf-8",
19
20         data: "{'name':'zhangsan'}",
21
22         success: function(json) { alert(json.d) },
23
24         error: function(error) {
25
26         alert("调用出错" + error.responseText);
27
28         }
29     });
  

提示:在$.ajax函数中,data必须要以字符串的形式表示JSON,而不能直接用JSON数据传进去。可能有些朋友对JSON对象和JSON对象的字符串

不大好区分,其实,字符串类似C#里用“”引起来的东西,而JSON对象是直接写在{}中的。简单的测试方法是直接通过alert函数弹出,如果显示[object:object]

则为JSON对象,否则就是一个字符串。

结果如下图:





测试二:对于WebService复杂参数类型:


01         WebService接口函数代码如下:
02
03         [WebMethod(Description = "测试方法")]
04         public string ProcessPersonalInfo(Person person)
05         {
06             return person.Name + person.Tel;
07         }
08
09         Person实体:
10
11         public class Person
12         {
13             public string Name { get; set; }
14
15             public int Age { get; set; }
16
17             public string Address { get; set; }
18
19             public string Tel { get; set; }
20
21         }
22
23 JQ调用代码如下:
24
25         $.ajax({
26
27             type: "POST",
28
29             url: "WebService1.asmx/ProcessPersonalInfo",
30
31             dataType: "json",
32
33             contentType: "application/json; charset=utf-8",
34
35             data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}",
36
37             success: function(json) { alert(json.d) },
38
39             error: function(error) {
40
41                 alert("调用出错" + error.responseText);
42             }
43         });
  结果如下图:





调用过程与简单参数类型类似,就是通过在JS中用一个表示Person的person对象的字符串,发往客户端后,WebService会自动将person对象的字符串

转换为Person实体对象。

测试三:对于WebService复杂返回类型



01 WebService接口函数代码如下:
02
03         [WebMethod(Description = "测试方法")]
04         public List<Person> GetPersonalList()
05         {
06             List<Person> persons = new List<Person>
07                                     {
08                                         new Person {Address = "beijing", Age = 25, Name = "zhangshan", Tel = "01082678866"}
09                                     };
10             return persons;
11         }<BR> JQ调用代码如下:
12
13             $.ajax({
14
15             type: "POST",
16
17             url: "WebService1.asmx/GetPersonalList",
18
19             dataType: "json",
20
21             contentType: "application/json; charset=utf-8",
22
23             success: function(json) { $(json.d).each(function() { alert(this.Name + "-" + this.Age + "-" + this.Address + "-" + this.Tel) }) },
24
25             error: function(error) {
26
27                 alert("调用出错" + error.responseText);
28
29             }
30
31         });
  如下图:



也就是说对于复杂返回类型,处理方式也是简单类型基本上是一样的。

曾听到有一种观念认为,Jq调用时WebSevice,用JSON作为数据交互格式时,返回数据类型一定是可序列化的。真的是这样吗。?

.Net的基本数据类型确实是可序列化的,这一点没有疑问。那么List<T>数据类型是否可以序列化呢。?看看List<T>的元数据(Metadata)信息

就知道了。。

[DebuggerTypeProxy(typeof (Mscorlib_CollectionDebugView<T>))]

[DebuggerDisplay("Count = {Count}")]

[Serializable]

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable

{

/**/

}

如果上面的说法成立,在这种情况下,调用成功也无可厚非。但是问题真是这样吗。?下面继续测试一下:

测试四:对于WebService复杂返回类型



01           [WebMethod(Description = "测试方法")]
02         public Person GetPerson()
03         {
04             Person person = new Person {<BR>                               Address = "beijing", Age = 27, <BR>                               Name = "zhangshan", Tel = "01082678866"                               <BR>                              };
05             return person;
06         }
07
08 JQ调用代码如下:
09
10         $.ajax({
11
12             type: "POST",
13
14             url: "WebService1.asmx/GetPerson",
15
16             dataType: "json",
17
18             contentType: "application/json; charset=utf-8",
19
20             //data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}",
21
22             success: function(json) { $(json.d).each(function() { alert(this.Name + "-" + this.Age + "-" + this.Address + "-" + this.Tel) }) },
23
24             error: function(error) {
25
26                 alert("调用出错" + error.responseText);
27
28             }
29
30         });
  如下图:



但是测试四中,GetPerson()方法返回Person数据类型。再看看Person实体的定义,根本就没有标记问可序列化。

由结果可知:JQ调用WebService,并不一定需要返回复杂类型的数据必须是可序列化的。

下面做一个有趣的测试。大家都知道WebService的返回类型不能为Hashtable类型。因为它实现了因为它实现 IDictionary接口。

测试五:对于WebService复杂返回类型


01          [WebMethod(Description = "测试方法")]
02         public Hashtable GetPersonalHashtable()
03         {
04             Hashtable hashtable = new Hashtable();
05
06             Person person = new Person { Address = "beijing", Age = 25, Name = "zhangshan", Tel = "01082678866" };
07
08             hashtable.Add(1, person);
09
10             return hashtable;
11         }
12
13 JQ调用代码如下:
14
15         $.ajax({
16
17             type: "POST",
18
19             url: "WebService1.asmx/GetPersonalHashtable",
20
21             dataType: "json",
22
23             contentType: "application/json; charset=utf-8",
24
25             data: data,
26
27             success: function(json) { $(json.d).each(function() { alert(this["one"].Name) }) },
28
29             error: function(error) {
30
31                 alert("调用出错" + error.responseText);
32
33             }
34
35         });
 







这样,Jq居然能调用成功。这点是有点让人意想不到的。

总结:

1、Jq与WebService之间以JSON作为数据交换形式的时候,contentType: "application/json; charset=utf-8"是必须指定的。

要不然WebService不知道以何种数据作为转换。

2、Jq调用WebService返回复杂数据类型并不一定需要类型为可序列化。

3、WebService返回的JSON数据通过".d"获取如上面测试中的alert(json.d)
分享到:
评论

相关推荐

    JQuery访问Webservice返回JSON+复合类型+集合

    本篇文章将详细讲解如何使用jQuery访问Web服务并处理返回的JSON数据,特别是涉及复合类型和集合的情况。这对于构建跨平台应用,如Android的PhoneGap框架与服务器交互,尤其重要。 首先,理解jQuery的核心概念。...

    Json、Webservice、Jquery、Ajax

    相关知识点说明:此测试程序包含Json、Webservice、Jquery、Ajax相关知识 引用程序集:Newtonsoft.Json.Net35 文件夹及文件说明: JsonDemo\ 应用Newtonsoft相关用例文件夹 ContractResolver.aspx 传入泛型类...

    Jquery+JSON+WebService

    在IT行业中,jQuery、JSON和WebService是三种非常关键的技术,它们在Web开发中扮演着重要角色。本篇文章将深入探讨这三者之间的交互,并详细解释它们各自的功能与用途。 首先,jQuery是一个轻量级的JavaScript库,...

    jquery+webservice前后台交互,返回值json

    这里我们将深入探讨如何利用`jQuery`结合`WebService`来实现JSON格式的数据交换,以及如何通过`AJAX`进行异步通信。 首先,`jQuery`是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作以及Ajax...

    Jquery调用WebService示例方法(源代码)

    本示例将深入探讨如何使用jQuery来调用WebService,通过源代码解析相关知识点。 首先,了解jQuery的核心功能对理解jQuery调用WebService至关重要。jQuery提供了`$.ajax()`函数,它是进行异步数据请求的基础。在这个...

    jquery调用Webservice的demo(.net)

    在.NET开发环境中,jQuery是一个广泛使用的JavaScript库,用于在客户端进行高效的DOM操作、事件处理以及Ajax交互。而Web服务(Webservice)则是提供跨平台、跨语言的数据交换能力。本教程将通过一个简单的示例来讲解...

    一个基于jquery调用WebService和WebService输出JSON的源码例子

    这个源码例子“一个基于jquery调用WebService和WebService输出JSON的源码例子”显然涉及到如何利用jQuery与Web服务进行通信,并处理返回的JSON数据。接下来,我们将深入探讨相关知识点。 1. jQuery库的使用: ...

    jquery调用webservice总结

    .asmx/GetWords", //调用 WebService 的地址和方法名称组合 ---- WsURL/方法名 data: JSON.stringify({ word: 'example' }), //传递参数,使用 JSON.stringify 将对象序列化为 JSON 格式 dataType: 'json', success:...

    jquery跨域调用webservice

    本文将详细解释如何利用jQuery通过JSONP(JSON with Padding)的方式实现跨域调用WebService。 #### 1. JSONP 的基本原理 JSONP 是一种解决跨域请求的有效手段,它通过动态创建`&lt;script&gt;`标签来请求跨域的数据,并...

    【ASP.NET编程知识】浅谈对Jquery+JSON+WebService的使用小结.docx

    【ASP.NET编程知识】浅谈对Jquery+JSON+WebService的使用小结 在现代Web开发中,ASP.NET结合jQuery和JSON以及WebService技术是构建动态交互界面的常见选择。jQuery作为一个强大的JavaScript库,以其简洁易用的API...

    jQuery调用 WebService的实现代码

    在本文中,我们将深入探讨如何使用jQuery来调用WebService,这是一种常见的前端与后端交互方式。jQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互,使得Web开发更加高效。而...

    jQuery调用WebService返回JSON数据及参数设置注意问题

    .NET Framework 3.5的发布解决了WebService调用中json问题,本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,另外还要介绍一下用jQuery调用WebService的参数设置及设置不当所出现的问题,还有...

    jquery+json 无刷新分页

    **jQuery + JSON 无刷新分页技术详解** 在现代网页应用中,用户界面的响应速度和用户体验至关重要。无刷新分页技术就是一种提高用户交互体验的方法,它允许用户在不重新加载整个页面的情况下查看不同页面的数据。本...

    ASP.NET中jQuery调用WebService处理返回结果的方式

    在ASP.NET中,jQuery调用WebService进行异步通信时,主要通过jQuery的ajax方法实现。处理返回结果的关键在于理解返回数据的类型和对应的处理方式。对于返回字符串、数组或复杂对象,WebMethod可以通过设置不同的返回...

    JQuery调用WebService

    **jQuery调用WebService详解** 在Web开发中,前端与后端的数据交互是不可或缺的一部分。jQuery,作为一个轻量级、功能丰富的JavaScript库,提供了方便快捷的方式来处理这种交互,特别是在调用Web服务(WebService)...

    jquery调用基于.NET Framework 3.5的WebService返回JSON数据

    本主题将深入探讨如何使用jQuery调用基于.NET Framework 3.5的WebService并接收JSON格式的数据。 首先,我们需要了解jQuery的核心功能——$.ajax()方法。这是jQuery进行异步HTTP(Ajax)请求的主要接口。在调用.NET...

    WebService(Xml返回)+JQuery+Json自动补全项目

    本项目的核心是利用WebService获取XML格式的数据,然后通过工具将其转换为JSON(JavaScript Object Notation)格式,以便与JQuery库配合,实现前端的自动补全功能。下面将详细解释这一过程中的关键知识点。 首先,`...

    采用XSLT+CSS+JQuery+WebService技术实现ajax体验综合网站发布系统源码例子

    `WebService.asmx` 文件很可能是这个系统中WebService的服务接口,它接收来自客户端(如JavaScript)的请求,处理业务逻辑,并返回处理结果,通常以XML或JSON格式。通过Ajax调用WebService,用户可以在不离开当前...

Global site tag (gtag.js) - Google Analytics