对Jquery+JSON+Web瑟维斯的一些认知

小说不错:http://www.cnblogs.com/tyb1222/archive/2011/10/13/2210549.html

Jquery作为一款能够的JS框架,简单易用的脾性就无须说了。在实质上的开支进程中,使用JQ的AJAX函数调用WebService

的接口完毕AJAX的成效也成了①种比较普及的能力花招了。Web瑟维斯接口的得以完毕,平时都以由OOP语言完成的。所以

在WebService的接口函数中,难免可能会蒙受除了简单数据类型的错综复杂数据类型。复杂的数量的数目类型机有望是

WebService接口中的参数,也有非常的大希望是WebService的重返值。本文所描述的大旨为:

一、对于WebService接口复杂类型的参数,JQ调用的时候传出的JSON数据应该什么表示。?

二、JQ对WebService调用取得JSON数据类型。

三、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对象,不然正是三个字符串。

结果如下图:

json 1

json 2

测试贰:对于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);
            }
        });

  结果如下图:

json 3

json 4

调用进度与不难参数类型类似,正是经过在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);
 
            }
 
        });

  如下图:

json 5

也正是说对于复杂重返类型,管理情势也是简约类型基本上是同一的。

曾听到有1种价值观感觉,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);
 
            }
 
        });

  如下图:

json 6

不过测试四中,GetPerson()方法重回Person数据类型。再看看Person实体的概念,根本就平素不标识问可体系化。

由结果可以:JQ调用WebService,并不一定必要回到复杂类型的数量必须是可类别化的。

下边做3个妙不可言的测试。大家都理解WebService的归来类型不能够为Hashtable类型。因为它落成了因为它完结IDictionary接口。

测试5:对于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);
 
            }
 
        });

 json 7

json 8

json 9

 

诸如此类,Jq居然能调用成功。这一点是有点令人竟然的。

总结:

1、Jq与WebService之间以JSON作为数据交流情势的时候,contentType:
“application/json; charset=utf-八”是必须钦赐的。

不然WebService不驾驭以何种数据作为调换。

二、Jq调用WebService重返复杂数据类型并不一定须求类型为可连串化。

三、WebService再次来到的JSON数据经过”.d”获取如下面测试中的alert(json.d)

相关文章

网站地图xml地图