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

asp.net中利用jQuery+WebService可以轻松的实现页面的ajax效果,但在如何处理WebService的返回值的问题上,很容易犯错误。


以下整理了在javascript中如何处理WebService的返回值。


以下是WebService部分的代码,在这段代码中特别定义了三个方法,在javascript中有不同的处理方式:


/// <summary>

    /// 该方法返回一个string对象

    /// </summary>

    /// <returns></returns>

    [WebMethod]

    public string HelloWorld() {

        return "Hello World";

    }


    /// <summary>

    /// 该方法返回一个string数组

    /// </summary>

    /// <returns></returns>

    [WebMethod]

    public string[] GetStringArray() {

        return new String[] { "China","Ameria","Canada"};

    }    


    /// <summary>

    /// 该方法返回一个User对象集合

    /// </summary>

    /// <returns></returns>

    [WebMethod]

    public List<User> GetUsers() {

        return new List<User>() { 

            new User(){Id="s001",Name="aniu",Age=20},

            new User(){Id="s002",Name="dddd",Age=30},

            new User(){Id="s003",Name="ssss",Age=40},

            new User(){Id="s004",Name="aaaa",Age=50}

        };

    }


下面是javascript部分的代码,重点突出在处理返回值时的jQuery处理方法和DOM方法的区别,以及返回data类型为“xml”和“json”类型的不同


1.第一种形式:jQuery.ajax调用返回stringWebService的方法

//WebService默认的返回数据类型为xml

function checkUserName() {

    $.ajax({

        type: "post",

        url: "WebService.asmx/HelloWorld",

        data: "name=" + $("#txtName").val(),

dataType: "xml",//xml格式

        success: function (e) {

//jQuery对象形式处理结果

            alert($(e).text());

//DOM对象形式处理结果

            alert(e.documentElement.firstChild.nodeValue);

        }

    });

}


//下面将返回结果变为“json”类型,处理方式将发生变化

$("#btn1").click(function () {

    $.ajax({

        type: "post",

        contentType: "application/json",

        url: "TestWebService.asmx/HelloWorld",

        data: "{}",

        dataType: "json",//json格式

        success: function (result) {

            alert(result.d);

        }

    });

});

小结:从以上处理代码来看,返回的是单个值时,json格式数据比xml格式数据处理更方便



2.第二种形式:jQuery.ajax调用返回string[]数组的WebService的方法

//返回结果为xml数据格式,分别采用jQuery和DOM方式处理结果

$("#btn2_xml").click(function () {

    $.ajax({

        type: "post",

        url: "TestWebService.asmx/GetStringArray",

        success: function (result) {

            //jQuery方式获取内容

            //string:节点名,result.documentElement:查找的上下文

            $("string", result.documentElement).each(function (i) {

                alert($(this).text());

            });

            //DOM方式获取内容

            var strings = entElement.getElementsByTagName("string");

            for (var i = 0; i < strings.length; i++) {

                alert(strings[i].firstChild.nodeValue); //特别注意这里的dom写法

            }

        }

    });

});


//返回结果为json数据格式,分别采用jQuery和DOM方式处理结果

$("#btn2").click(function () {

    $.ajax({

        type: "post",

        contentType: "application/json",

        url: "TestWebService.asmx/GetStringArray",

        data: "{}",

        dataType: "json",

        success: function (result) {

            //jQuery方式获取内容

            $(result.d).each(function (i) {

                alert(this);

            });

            //DOM方式获取内容

            for (var i = 0; i < result.d.length; i++) {

                alert(result.d[i]);//直接将d作为数组处理

    }

        }

    });

});

小结:从以上代码可以看出,如果返回的是xml格式数据,将数据封装为jQuery对象后处理比处理原始xml数据更加容易,而且jQuery是跨浏览器的,DOM与浏览器相关,可能

出现浏览器兼容的问题



3.第三种形式:jQuery.ajax调用返回List<User>集合数据的WebService的方法

//返回结果为xml数据格式,分别采用jQuery和DOM方式处理结果

$("#btnList_xml").click(function () {

    $.ajax({

        type: "post",

        contentType: "application/xml",

        url: "TestWebService.asmx/GetUsers",

        data: "{}",

        dataType: "xml",

        success: function (result) {

            //jQuery方式获取内容

            $("User", result.documentElement).each(function (i) {

                alert($(this).find("Id").text() + "\t"

                    + $(this).find("Name").text() + "\t"

                    + $(this).find("Age").text());

            });

            //DOM方式获取内容

            var users = result.documentElement.getElementsByTagName("User");

            for (var i = 0; i < users.length; i++) {

                var id =users[i]. 

    getElementsByTagName("Id")[0].firstChild.nodeValue;

                var name = users[i].

getElementsByTagName("Name")[0].firstChild.nodeValue;

                var age = users[i].

getElementsByTagName("Age")[0].firstChild.nodeValue;

                alert(id + "\t" + name + "\t" + age);

            }

        }

    });

});


//返回结果为json数据格式,分别采用jQuery和DOM方式处理结果

$("#btnList").click(function () {

    $.ajax({

        type: "post",

        contentType: "application/json",

        url: "TestWebService.asmx/GetUsers",

        data: "{}",

        dataType:"json",

        success: function (result) {

            //jQuery方式获取内容

            $(result.d).each(function (i) {

                alert(this.Id + "\t" + this.Name + "\t" + this.Age);

            });

            //DOM方式获取内容

            var r = result.d;

            for (var i = 0; i < r.length; i++) {

                alert(r[i].Id + "\t" + r[i].Name + "\t" + r[i].Age);

            }

        }

    });

});



小结:从以上的处理代码来看,如果返回的json格式数据,用jQueryjavascript方式处理的难易程度相差无几,只是处理的代码格式有点不同,所以返回对象集合数据最好返回json格式,这样不管用哪种方式,处理起来都相当方便。

总结:jQuery调用WebService,在处理返回数据格式上尽量采用json格式,处理起来要方便许多。关键是要区分jQuery对象和DOM对象在处理数据的不同之处,包括语法、属性和方法的使用等方面。


总结:jQuery调用WebService,在处理返回数据格式上尽量采用json格式,处理起来要方便许多。关键是要区分jQuery对象和DOM对象在处理数据的不同之处,包括语法、属性和方法的使用等方面。


附:以上三个WebService方法的xml数据内容如下:

 

ASP.NET中jQuery调用WebService处理返回结果的方式 - 胡杰 - 胡杰的博客

                   HelloWorld方法的返回结果


ASP.NET中jQuery调用WebService处理返回结果的方式 - 胡杰 - 胡杰的博客

GetStringArray方法的返回结果


ASP.NET中jQuery调用WebService处理返回结果的方式 - 胡杰 - 胡杰的博客

GetUsers方法的返回结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值