必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

在ajax请求返回后,本文转载自

2019-11-22 19:22 来源:未知

个人感觉有两点是比较方便的:第一,在对WebService做ajax请求的时候,请求的url的写法是:服务地址/调用的方法名称,这样在请求的url中就确定了要调用的方法了,不必再在WebService代码中去判断ajax请求调用的是哪个方法了。第二,方法可以返回更多的数据类型,比如对象,泛型集合等;在ajax请求返回后,会自动将这些类型转换为json对象。而使用ashx的方式的话,需要先将这些类型转换为json格式的数据才能返回。 在使用jQuery调用WebService的方法的时候,只能发送post方式的请求;如果要返回json格式的数据的话,需要将contentType设置为application/json;返回的数据是以字母d为键值的json对象。 1.返回字符串类型 复制代码 代码如下: [WebMethod] public string HelloWorld() { return "Hello World"; } $.ajax({ type: "post", contentType: "application/json", url: "UserService.asmx/HelloWorld", data: "{}", dataType: "json", success: function { alert; 注意上面获取数据的方式:result.d,这是因为在返回的json数据格式是以d为键值的json对象。可以通过IE 9的开发人员工具,按下F12,选择网络,点击开始捕获按钮,重新刷新一下页面可以看到所有的请求列表,如下图所示:选择其中一个,点击转到详细视图,可以看到发送的请求以及响应的内容,如下图所示:根据这个相应正文的内容,我们可以看出为什么要使用result.d来获取返回的内容了。2.返回对象类型复制代码 代码如下: [WebMethod] public User GetUser() { User user = new User() { Id = 1, UserName = "zhang san", Password = "123qwe" }; return user; } $.ajax({ type: "post", contentType: "application/json", url: "UserService.asmx/GetUser", data: "{}", dataType: "json", success: function { alert(result.d.Id + " " + result.d.UserName); } }); 3.返回泛型集合类型 复制代码 代码如下: [WebMethod] public List GetUserList() { List list = new List() { new User{Id=1,UserName="zhang san",Password="asfasdf"}, new User{Id=2,UserName="li si",Password="3rwer"}, new User{Id=3,UserName="wang wu",Password="rqwe"} }; return list; } $.ajax({ type: "post", contentType: "application/json", url: "UserService.asmx/GetUserList", data: "{}", dataType: "json", success: function { $.each(result.d, function { alert(data.Id+" "+data.UserName); }); } }); 对于泛型集合,对应的相应正文为:{"d":[{"__type":"WebServiceDemo.User","Id":1,"UserName":"zhang san","Password":"asfasdf"},{"__type":"WebServiceDemo.User","Id":2,"UserName":"li si","Password":"3rwer"},{"__type":"WebServiceDemo.User","Id":3,"UserName":"wang wu","Password":"rqwe"}]}。这时,result.d得到的是一个数组,通过each方法来遍历数组的每一项的属性值。 4.传递参数。在传递参数的时候,需要注意的是,ajax请求的参数的名称必须和WebService中的方法的名称一致,否则调用不能成功。 复制代码 代码如下: [WebMethod] public string Hello { return "Hello " + name; } $.ajax({ type: "post", contentType: "application/json", url: "UserService.asmx/Hello", data: "{name:'admin'}", dataType: "json", success: function { alert;

1. 服务必须声明为ScriptService(否则会出现下面的问题)

必威 1

</script>

2.服务的方法不需要任何更改,保持原状

我总结几个关键点

    public class User
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
    }
    /// <summary>
    /// 返回字符串
    /// </summary>
    /// <returns></returns>
    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }
    /// <summary>
    /// 带参数
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    [WebMethod]
    public string ReturnString(string s)
    {
        return s;
    }
    /// <summary>
    /// 返回对象
    /// </summary>
    /// <returns></returns>
    [WebMethod]
    public User ReturnDomain()
    {
        return new User { Name = "王斌", Age = 11 };
    }
    /// <summary>
    /// 返回集合对象
    /// </summary>
    /// <returns></returns>
    [WebMethod]
    public List<User> ReturnList()
    {
        return new List<User> {
                                new User{Name="王斌",Age=23},
                                new User{Name="李攀",Age=11}
        };
    }
    /// <summary>
    /// 返回XML
    /// </summary>
    /// <returns></returns>
    [WebMethod]
    public System.Data.DataTable ReturnXML()
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Age", typeof(int));
        DataRow dr = dt.NewRow();
        dr[0]必威, = "wangbin";
        dr[1] = 11;
        dt.Rows.Add(dr);
        DataRow dr1 = dt.NewRow();
        dr1[0] = "lipan";
        dr1[1] = 22;
        dt.Rows.Add(dr1);
        dt.TableName = "xmltest";
        return dt;
    }

4.默认返回的json都是用d为根键的

必威 2

 

1、编写4种WebService方法

    [WebService(Namespace = "]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ScriptService]                             //令WebService成功传入Json参数,并以Json形式返回结果
    [GenerateScriptType(typeof(Person))]        //不是必要,但推荐添加(如果Person里面再嵌套另一个复杂类型,则必要声明)
    [ToolboxItem(false)]
    public class WebService1 : System.Web.Services.WebService
    {
        /// <summary>
        /// 无任何参数
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        /// <summary>
        /// 传入参数
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        [WebMethod]
        public string Hello(string name)
        {
            return string.Format("Hello {0}", name);
        }

        /// <summary>
        /// 返回泛型列表
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        [WebMethod]
        public List<int> CreateArray(int i)
        {
            List<int> list = new List<int>();

            while (i >= 0)
            {
                list.Add(i--);
            }

            return list;
        }

        /// <summary>
        /// 返回复杂类型
        /// </summary>
        /// <param name="name"></param>
        /// <param name="age"></param>
        /// <returns></returns>
        [WebMethod]
        public Person GetPerson(string name, int age)
        {
            return new Person()
            {
                Name = name,
                Age = age
            };
        }
    }

    /// <summary>
    /// 复杂类型
    /// </summary>
    public class Person
    {
        public string Name { get; set; }

        public int Age { get; set; }
    }

2、编写js调用以上方法

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";
<html xmlns=";
<head runat="server">
    <title>无标题页</title>
    <style type="text/css">
    input
    {
        width:200px;
    }
    </style>

    <script type="text/javascript" src="jquery-1[1].2.6.min.js"></script>
    <script type="text/javascript">
    $(function(){ 
     
        /*
            1、WebService请求类型都为Post,WebService的Url为“[WebServiceUrl]/[WebMethod]”
            2、contentType声明为Json
            3、data要用Json的字符串格式传入
            4、设置了dataType为json后,result就直接为返回的Json对象。

        */
       
        //调用无参数方法
        $("#btnHelloWorld").click(function(){
            $.ajax({
                type: "POST",
                contentType:"application/json",
                url:"WebService1.asmx/HelloWorld",
                data:"{}",
                dataType:'json',
                success:function(result){                   
                    alert(result.d);
                }
            });
        });       
       
        //传入1个参数
        $("#btnHello").click(function(){
            $.ajax({
                type: "POST",
                contentType:"application/json",
                url:"WebService1.asmx/Hello",
                data:"{name:'KiMoGiGi'}",
                dataType:'json',
                success:function(result){                   
                    alert(result.d);
                }
            });
        });
       
         //返回泛型列表
        $("#btnArray").click(function(){
            $.ajax({
                type: "POST",
                contentType:"application/json",
                url:"WebService1.asmx/CreateArray",
                data:"{i:10}",
                dataType:'json',
                success:function(result){                   
                    alert(result.d.join(" | "));
                }
            });
        });
       
         //返回复杂类型
        $("#btnPerson").click(function(){
            $.ajax({
                type: "POST",
                contentType:"application/json",
                url:"WebService1.asmx/GetPerson",
                data:"{name:'KiMoGiGi',age:26}",
                dataType:'json',
                success:function(result){
                    var person = result.d;
                    var showText = [];
                    for(var p in person){
                        showText.push(p + ":" + person[p]);
                    }
                    alert(showText.join("rn"));
                }
            });
        });
    });
    </script>
</head>
    <body>
        <form id="form1" runat="server">
            <p>
                <input type="button" id="btnHelloWorld" value="HelloWorld" />
            </p>
            <p>
                <input type="button" id="btnHello" value="Hello" />
            </p>
            <p>
                <input type="button" id="btnArray" value="CreateArray" />
            </p>
            <p>
                <input type="button" id="btnPerson" value="GetPerson" />
            </p>
        </form>
    </body>
</html>

后台WebService:

TAG标签:
版权声明:本文由必威发布于必威-前端,转载请注明出处:在ajax请求返回后,本文转载自