• Jquery ajax 学习笔记


     本人的js & jq 一直是菜鸟级别,最近不忙就看了看ajax方面的知识,文中部分内容参考自这里&这里 之前一直用js写ajax现在基于jq实现方便多了~

    $.get & $.post 和 $.ajax的区别

    之前看过同事写过$.post,而我一直用$.ajax,后来才知道$.get()$.post()都是通过get和post方式来进行异步,$.ajax()说是jquery最底层的ajax实现的,这里我们使用$.ajax的方式实现.

    调用无参方法

    //调用无参方法
    $("#Button1").click(function () {
        $.ajax({
            //要用post方式      
            type: "Post",
            //方法所在页面和方法名      
            url: "About.aspx/SayHello",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //返回的数据用data.d获取内容      
                alert(data.d);
            },
            error: function (err) {
                alert("Error: " + err);
            }
        });
    })
    
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string SayHello()
    {
        return "Hello Ajax!";
    }
    

    这里只列出常用的$.ajax的属性以及方法详情请参考这里

    有点类似类似调用WebService,后台方法必须为static,访问范围为protect/public,

    WebMethod特性是必须的,这样才能被客户端脚本调用,支持远程调用.

    ScriptMethod特性是可选的,用于指定调用方法的 HTTP 谓词(GET 或 POST),以及指定输出格式(JSON或XML)没有此特性,方法则默认只能被HTTP POST方式调用,并且输出将序列化为 JSON.

    Asp.net 3.5以上可直接使用以上两个命名空间,Asp.net 2.0需安装Asp.net Ajax,或者单独引用Asp.net Ajax的System.Web.Extensions.dll.

    如后台方法无参数,data项可填为"{}"或者直接省略.Asp.net 3.5以上使用返回值,需要加上".d",如以上代码里的"data.d",Asp.net 2.0直接使用"data"就行了.原因可能是两者序列化的方法有所不同.

    调用有参方法

    //调用返回有参方法
    $(function () {
        $("#Button2").click(function () {
            $.ajax({
                type: "Post",
                url: "About.aspx/Hello",
                //方法传参的写法一定要对,name为形参的名字,age为第二个形参的名字      
                data: "{'name':'chenxu','age':'21'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    //返回的数据用data.d获取内容      
                    alert(data.d);
                },
                error: function (err) {
                    alert("Error: " + err);
                }
            });
        });
    });
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string Hello(string name, string age)
    {
        return string.Format("hello my name is {0}, {1} years old.", name, age);
    }
    

    调用返回集合方法

    //调用返回集合方法
    $("#Button3").click(function () {
        $.ajax({
            type: "Post",
            url: "About.aspx/GetList",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //插入前先清空ul      
                $("#list").html("");
    
                //递归获取数据      
                $(data.d).each(function () {
                    //插入结果到li里面      
                    $("#list").append("<li>" + this + "</li>");
                });
    
                alert(data.d);
            },
            error: function (err) {
                alert("Error: " + err);
            }
        });
    });
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static List<string> GetList()
    {
        List<string> list = new List<string>
        {
            "a","b","c","d","e","f"
        };
    
        return list;
    }
    

    调用返回实体方法

    $("#Button4").click(function () {
        $.ajax({
            type: "Post",
            url: "About.aspx/GetPerson",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $(data.d).each(function () {
                    alert(this["name"]);
                })
            },
            error: function (err) {
                alert("Error: " + err);
            }
        });
    });
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static Person GetPerson()
    {
        return new Person { name = "chenxu" };
    }  
    public class Person
    {
        public string name { get; set; }
    }

    调用返回DATASET

    //调用返回DATASET方法
    $('#Button5').click(function () {
        $.ajax({
            type: "POST",
            url: "WebService.asmx/GetDataSet",
            //data: "{}",
            dataType: 'xml', //返回的类型为XML 
            success: function (result) { //成功时执行的方法 
                //捕获处理过程中的异常并输出 
                try {
                    $(result).find("Table1").each(function () {
                        alert($(this).find("Id").text() + " " + $(this).find("Value").text());
                    });
                }
                catch (e) {
                    alert(e);
                    return;
                }
            },
            error: function (result, status) { //出错时会执行这里的回调函数 
                if (status == 'error') {
                    alert(status);
                }
            }
        });
    });
    [WebMethod]
    //[ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public static DataSet GetDataSet()
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        dt.Columns.Add("ID", Type.GetType("System.String"));
        dt.Columns.Add("Value", Type.GetType("System.String"));
               
        DataRow dr = dt.NewRow();
        dr["ID"] = "1";
        dr["Value"] = ".NET";
        dt.Rows.Add(dr);
    
        dr = dt.NewRow();
        dr["ID"] = "2";
        dr["Value"] = "JAVA";
        dt.Rows.Add(dr);
        ds.Tables.Add(dt);
    
        return ds;
    }

    调用dataset总是出问题,之前记得这样写是好用的,找了好长时间没找到问题,哪位大神找到了告诉我.

    把web form里面的方法GetDataSet放到web service(asmx)中 并设定 contentType: "text/xml; charset=utf-8",dataType: 'xml' 

    调用ASHX 一般处理程序

    //调用ASHX 一般处理程序
    $("#Button6").click(function () {
        $.ajax({
            type: "Post",
            url: "Hello.ashx",
            contentType: "application/json; charset=utf-8",
            dataType: "html", //此处需要写成html
            success: function (data) {
                alert(data);
            },
            error: function (err) {
                alert("Error: " + err);
            }
        });
    });
    /// <summary>
    /// Hello 的摘要说明
    /// </summary>
    public class Hello : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write("Hello World");
            context.Response.End();
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
    

    完整code

    <%@ Page Title="主页" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
        CodeBehind="Default.aspx.cs" Inherits="JqueryAjax._Default" %>
    
    <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
        <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
    
                //调用无参方法
                $("#Button1").click(function () {
                    $.ajax({
                        //要用post方式      
                        type: "Post",
                        //方法所在页面和方法名      
                        url: "About.aspx/SayHello",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {
                            //返回的数据用data.d获取内容      
                            alert(data.d);
                        },
                        error: function (err) {
                            alert("Error: " + err);
                        }
                    });
                })
    
                //调用返回有参方法
                $(function () {
                    $("#Button2").click(function () {
                        $.ajax({
                            type: "Post",
                            url: "About.aspx/Hello",
                            //方法传参的写法一定要对,str为形参的名字,str2为第二个形参的名字      
                            data: "{'name':'chenxu','age':'21'}",
                            contentType: "application/json; charset=utf-8",
                            dataType: "json",
                            success: function (data) {
                                //返回的数据用data.d获取内容      
                                alert(data.d);
                            },
                            error: function (err) {
                                alert("Error: " + err);
                            }
                        });
                    });
                });
    
                //调用返回集合方法
                $("#Button3").click(function () {
                    $.ajax({
                        type: "Post",
                        url: "About.aspx/GetList",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {
                            //插入前先清空ul      
                            $("#list").html("");
    
                            //递归获取数据      
                            $(data.d).each(function () {
                                //插入结果到li里面      
                                $("#list").append("<li>" + this + "</li>");
                            });
    
                            alert(data.d);
                        },
                        error: function (err) {
                            alert("Error: " + err);
                        }
                    });
                });
    
                //调用返回实体方法
                $("#Button4").click(function () {
                    $.ajax({
                        type: "Post",
                        url: "About.aspx/GetPerson",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (data) {
                            $(data.d).each(function () {
                                alert(this["name"]);
                            })
                        },
                        error: function (err) {
                            alert("Error: " + err);
                        }
                    });
                });
    
                //调用返回DATASET方法
                $('#Button5').click(function () {
                    $.ajax({
                        type: "POST",
                        url: "WebService.asmx/GetDataSet",
                        //data: "{}",
                        dataType: 'xml', //返回的类型为XML 
                        success: function (result) { //成功时执行的方法 
                            //捕获处理过程中的异常并输出 
                            try {
                                $(result).find("Table1").each(function () {
                                    alert($(this).find("Id").text() + " " + $(this).find("Value").text());
                                });
                            }
                            catch (e) {
                                alert(e);
                                return;
                            }
                        },
                        error: function (result, status) { //出错时会执行这里的回调函数 
                            if (status == 'error') {
                                alert(status);
                            }
                        }
                    });
                });
    
                //调用ASHX 一般处理程序
                $("#Button6").click(function () {
                    $.ajax({
                        type: "Post",
                        url: "Hello.ashx",
                        contentType: "application/json; charset=utf-8",
                        dataType: "html", //此处需要写成html
                        success: function (data) {
                            alert(data);
                        },
                        error: function (err) {
                            alert("Error: " + err);
                        }
                    });
                });
            })
        </script>
    </asp:Content>
    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
        <h2>
            ASP.NET Jquery Ajax 调用后台方法示例.
        </h2>
        <input id="Button1" type="button" value="调用无参方法" />
        <input id="Button2" type="button" value="调用有参方法" />
        <input id="Button3" type="button" value="调用返回集合方法" />
        <input id="Button4" type="button" value="调用返回实体方法" />
        <input id="Button5" type="button" value="调用返回DATASET方法" />
        <input id="Button6" type="button" value="调用ASHX" />
        <ul id="list">
        </ul>
    </asp:Content>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.Services;
    using System.Web.Script.Services;
    using System.Data;
    
    namespace JqueryAjax
    {
        public partial class About : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public static string SayHello()
            {
                return "Hello Ajax!";
            }
    
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public static string Hello(string name, string age)
            {
                return string.Format("hello my name is {0}, {1} years old.", name, age);
            }
    
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public static List<string> GetList()
            {
                List<string> list = new List<string>
             {
                "a","b","c","d","e","f"
             };
    
                return list;
            }
    
            [WebMethod]
            [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
            public static Person GetPerson()
            {
                return new Person { name = "chenxu" };
            } 
        }
    
        public class Person
        {
            public string name { get; set; }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    
    namespace JqueryAjax
    {
        /// <summary>
        /// Hello 的摘要说明
        /// </summary>
        public class Hello : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                context.Response.Write("Hello World");
                context.Response.End();
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Data;
    
    /// <summary>
    ///WebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 
    // [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
    
        public WebService()
        {
        }
    
        [WebMethod]
        public DataSet GetDataSet()
        {
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            dt.Columns.Add("Id", Type.GetType("System.String"));
            dt.Columns.Add("Vlues", Type.GetType("System.String"));
            DataRow dr = dt.NewRow();
            dr["Id"] = "小花";
            dr["Vlues"] = "aaaaaaaaa";
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["Id"] = "小兵";
            dr["Vlues"] = "bbbbbbbbb";
            dt.Rows.Add(dr);
            ds.Tables.Add(dt);
            return ds;
        }
    }

    总结

    一开始对data.d的这个d不是很理解,感谢这篇文章的博主,相比较与aspx  ashx只能通过ProcessRequest方法进行输出而不能在内部写static method,如果想在ashx中使用session只要实现IRequiresSessionState接口即可,要不然获取到session会为null.

    SourceCode

  • 相关阅读:
    数据结构与算法(3-4)--矩阵的压缩存储
    数据结构与算法(3-3)--队列的应用
    数据结构与算法(3-2)--栈的应用
    数据结构与算法(3-1)--栈和队列
    数据结构与算法(2)--线性表(数组和链表)
    数据结构与算法(1)--时间及空间复杂度
    python变量与地址的关系
    python高级(03)--socket编程
    python高级(02)--生成器和迭代器
    python处理http接口请求
  • 原文地址:https://www.cnblogs.com/Chendaqian/p/3396724.html
Copyright © 2020-2023  润新知