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简单参数类型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
WebService接口函数代码如下: [WebMethod(Description = "测试方法" )]
public string ProcessPersonalInfo(Person person)
{
return person.Name + person.Tel;
}
JQ调用代码如下:
$.ajax({
type: "POST" ,
url: "WebService1.asmx/GetString" ,
dataType: "json" ,
contentType: "application/json; charset=utf-8" ,
data: "{'name':'zhangsan'}" ,
success: function(json) { alert(json.d) },
error: function(error) {
alert( "调用出错" + error.responseText);
}
});
|
提示:在$.ajax函数中,data必须要以字符串的形式表示JSON,而不能直接用JSON数据传进去。可能有些朋友对JSON对象和JSON对象的字符串
不大好区分,其实,字符串类似C#里用“”引起来的东西,而JSON对象是直接写在{}中的。简单的测试方法是直接通过alert函数弹出,如果显示[object:object]
则为JSON对象,否则就是一个字符串。
结果如下图:
测试二:对于WebService复杂参数类型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
WebService接口函数代码如下:
[WebMethod(Description = "测试方法" )]
public string ProcessPersonalInfo(Person person)
{
return person.Name + person.Tel;
}
Person实体:
public class Person
{
public string Name { get ; set ; }
public int Age { get ; set ; }
public string Address { get ; set ; }
public string Tel { get ; set ; }
}
JQ调用代码如下: $.ajax({
type: "POST" ,
url: "WebService1.asmx/ProcessPersonalInfo" ,
dataType: "json" ,
contentType: "application/json; charset=utf-8" ,
data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}" ,
success: function(json) { alert(json.d) },
error: function(error) {
alert( "调用出错" + error.responseText);
}
});
|
结果如下图:
调用过程与简单参数类型类似,就是通过在JS中用一个表示Person的person对象的字符串,发往客户端后,WebService会自动将person对象的字符串
转换为Person实体对象。
测试三:对于WebService复杂返回类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
WebService接口函数代码如下: [WebMethod(Description = "测试方法" )]
public List<Person> GetPersonalList()
{
List<Person> persons = new List<Person>
{
new Person {Address = "beijing" , Age = 25, Name = "zhangshan" , Tel = "01082678866" }
};
return persons;
}<br> JQ调用代码如下:
$.ajax({
type: "POST" ,
url: "WebService1.asmx/GetPersonalList" ,
dataType: "json" ,
contentType: "application/json; charset=utf-8" ,
success: function(json) { $(json.d).each(function() { alert( this .Name + "-" + this .Age + "-" + this .Address + "-" + this .Tel) }) },
error: function(error) {
alert( "调用出错" + error.responseText);
}
});
|
如下图:
也就是说对于复杂返回类型,处理方式也是简单类型基本上是一样的。
曾听到有一种观念认为,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复杂返回类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[WebMethod(Description = "测试方法" )]
public Person GetPerson()
{
Person person = new Person {<br> Address = "beijing" , Age = 27, <br> Name = "zhangshan" , Tel = "01082678866" <br> };
return person;
}
JQ调用代码如下: $.ajax({
type: "POST" ,
url: "WebService1.asmx/GetPerson" ,
dataType: "json" ,
contentType: "application/json; charset=utf-8" ,
//data: "{'person':{'Name':'zhangsan','Age':28,'Address':'beijing',Tel:'01082658866'}}",
success: function(json) { $(json.d).each(function() { alert( this .Name + "-" + this .Age + "-" + this .Address + "-" + this .Tel) }) },
error: function(error) {
alert( "调用出错" + error.responseText);
}
});
|
如下图:
但是测试四中,GetPerson()方法返回Person数据类型。再看看Person实体的定义,根本就没有标记问可序列化。
由结果可知:JQ调用WebService,并不一定需要返回复杂类型的数据必须是可序列化的。
下面做一个有趣的测试。大家都知道WebService的返回类型不能为Hashtable类型。因为它实现了因为它实现 IDictionary接口。
测试五:对于WebService复杂返回类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
[WebMethod(Description = "测试方法" )]
public Hashtable GetPersonalHashtable()
{
Hashtable hashtable = new Hashtable();
Person person = new Person { Address = "beijing" , Age = 25, Name = "zhangshan" , Tel = "01082678866" };
hashtable.Add(1, person);
return hashtable;
}
JQ调用代码如下: $.ajax({
type: "POST" ,
url: "WebService1.asmx/GetPersonalHashtable" ,
dataType: "json" ,
contentType: "application/json; charset=utf-8" ,
data: data,
success: function(json) { $(json.d).each(function() { alert( this [ "one" ].Name) }) },
error: function(error) {
alert( "调用出错" + error.responseText);
}
});
|
这样,Jq居然能调用成功。这点是有点让人意想不到的。
总结:
1、Jq与WebService之间以JSON作为数据交换形式的时候,contentType: "application/json; charset=utf-8"是必须指定的。
要不然WebService不知道以何种数据作为转换。
2、Jq调用WebService返回复杂数据类型并不一定需要类型为可序列化。
3、WebService返回的JSON数据通过".d"获取如上面测试中的alert(json.d)
相关推荐
在IT行业中,jQuery、JSON和WebService是三种非常关键的技术,它们在Web开发中扮演着重要角色。本篇文章将深入探讨这三者之间的交互,并详细解释它们各自的功能与用途。 首先,jQuery是一个轻量级的JavaScript库,...
【ASP.NET编程知识】浅谈对Jquery+JSON+WebService的使用小结 在现代Web开发中,ASP.NET结合jQuery和JSON以及WebService技术是构建动态交互界面的常见选择。jQuery作为一个强大的JavaScript库,以其简洁易用的API...
**jQuery + JSON 无刷新分页技术详解** 在现代网页应用中,用户界面的响应速度和用户体验至关重要。无刷新分页技术就是一种提高用户交互体验的方法,它允许用户在不重新加载整个页面的情况下查看不同页面的数据。本...
本项目的核心是利用WebService获取XML格式的数据,然后通过工具将其转换为JSON(JavaScript Object Notation)格式,以便与JQuery库配合,实现前端的自动补全功能。下面将详细解释这一过程中的关键知识点。 首先,`...
摘要:.NET源码,Ajax相关,JSON Jquery+JSON+实现WebService交互实例,中间介质是XML,这些例子虽然小,但却有大作用,现在只会,而不会Ajax,貌似有点不入流了啊!希望这个例子可以帮助您改进程序。
这里我们将深入探讨如何利用`jQuery`结合`WebService`来实现JSON格式的数据交换,以及如何通过`AJAX`进行异步通信。 首先,`jQuery`是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作以及Ajax...
3、com.morningstar.utility.WSUtility为调用WebService的客户端代码,在调用这个WebService返回数据时存在一点问题。希望有人能帮我解决下,指点下我,小弟不胜感激。EncryUtility为加密类,有MD5和SHA可选。 4、...
JQuery1.4.2+Struts2.1.8+JSON0.34+Spring2.5.6+Hibernate3.5+XFire1.2.6整合实例(已上传) 1、JSON0.34使用的是struts2附带的struts2-json-plugin-2.1.8.1.jar 2、db是mysql,名字为test,用户名root,密码空 3、...
在这个项目中,“jQuery+JavaScript+Webservice+sql2005实现TreeView右键操作菜单”是一个典型的应用实例,它结合了前端和后端技术来实现一个功能丰富的数据管理界面。下面我们将深入探讨这个项目中的关键知识点。 ...
这是一个基于Web技术构建的综合网站发布系统实例,它利用了XSLT(可扩展样式表语言转换)、CSS(层叠样式表)、JQuery(一种强大的JavaScript库)以及WebService(网络服务)来提供Ajax(异步JavaScript和XML)的...
相关知识点说明:此测试程序包含Json、Webservice、Jquery、Ajax相关知识 引用程序集:Newtonsoft.Json.Net35 文件夹及文件说明: JsonDemo\ 应用Newtonsoft相关用例文件夹 ContractResolver.aspx 传入泛型类...
本篇文章将详细讲解如何利用jQuery的jsonp方法实现Ajax跨域请求,以及如何在服务器端使用.Net的*.handler和WebService来返回JSON数据。 首先,理解JSONP的基本原理。JSONP是一种非官方的协议,通过动态创建`...
### 使用jQuery AJAX 调用 WebService 接口详解 #### 概述 在Web开发领域,使用jQuery的AJAX功能来调用Web服务(WebService)已成为一种常见且高效的手段。这种方式不仅简化了前端与后端之间的交互逻辑,还提高了...
本篇文章将详细讲解如何使用jQuery访问Web服务并处理返回的JSON数据,特别是涉及复合类型和集合的情况。这对于构建跨平台应用,如Android的PhoneGap框架与服务器交互,尤其重要。 首先,理解jQuery的核心概念。...
本文将详细解释如何利用jQuery通过JSONP(JSON with Padding)的方式实现跨域调用WebService。 #### 1. JSONP 的基本原理 JSONP 是一种解决跨域请求的有效手段,它通过动态创建`<script>`标签来请求跨域的数据,并...
这个源码例子“一个基于jquery调用WebService和WebService输出JSON的源码例子”显然涉及到如何利用jQuery与Web服务进行通信,并处理返回的JSON数据。接下来,我们将深入探讨相关知识点。 1. jQuery库的使用: ...
本文将深入探讨如何使用jQuery的Ajax方法来调用WebService,从而实现异步数据交换,提升用户体验。 首先,理解Ajax(Asynchronous JavaScript and XML)的核心概念是关键。Ajax允许网页在不刷新整个页面的情况下与...
### jQuery使用Ajax方法调用WebService知识点详解 #### 一、简介 在Web开发领域中,Ajax(Asynchronous JavaScript and XML)技术被广泛应用于实现页面局部刷新等功能,极大地提升了用户体验。结合jQuery这一流行的...