Jquery ajax调用后台aspx后台文件方法(不是ashx)

时间:2022-11-16 09:20:38

在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下。

(1)通过aspx.cs的静态方法+WebMethod进行处理

简单的介绍下WebMethod方法的用法

1.修饰符主要用public static修饰

2.方法前面加上[WebMethod]属性表明这是WebMethod方法

3.前台html页面(Client端)访问时要使用post方法,和后台.cs文件进行数据交互,否则会返回整个html页面。

4.当后台页面返回数据后,前台html页面需要用data.d接收返回的json字符串。

5.访问url:http://abc.com/abc.aspx/ajax方法

aspx.cs代码:

using System.Web.Services; 

[WebMethod]
public static string SayHello()
{
    return "Hello Ajax!";
}

前台jquery代码:

$(function() {
    $("#btn").click(function() {
        $.ajax({
            type: "post", //要用post方式
            url: "Demo.aspx/SayHello",//方法所在页面和方法名
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) {
                alert(data.d);//返回的数据用data.d获取内容
            },
            error: function(err) {
                alert(err);
            }
        });
    });
});
 

html代码:

<form id="form1" runat="server">
<div>
    <asp:Button ID="btn" runat="server" Text="验证用户" />
</div>
</form>

(2)通过一般处理程序ashx进行处理;

Jquery代码:

 $.ajax({
           type: "POST",
           url: "S_CBFBM.ashx",
           data: { ZBM: p_zdm },
           beforeSend: function() {
            //$("#div_load").visible = "true;
           },
           success: function(msg) {
           //$("#div_load").visible = false;
           $("#ds").html("<p>" + msg + "</p>");
           $("#CBFBM").val(msg);
                }
        });  

ashx.cs代码:

    <%@ WebHandler Language="C#" Class="AjaxHandler" %>
    using System;
    using System.Web;  

    public class AjaxHandler : IHttpHandler {
        public void ProcessRequest (HttpContext context) {
            context.Response.ContentType = "text/plain";
            if (context.Request["name"].ToString() == "admin" &&
                context.Request["pass"].ToString() == "admin")
            {
                context.Response.Write("Y");
            }
            else
            {
                context.Response.Write("N");
            }
        }  

        public bool IsReusable {
            get {
                return false;
            }
        }
    }  

(3)注意:当要返回一个泛型数组,枚举等不是字符串的时候需要对返回的内容进行JSON序列化,序列化代码如下:

  JavaScriptSerializer jsonUtil = new JavaScriptSerializer();
  string json = jsonUtil.Serialize(需要返回的对象);

(4)序列完后前台html页面接收需要用each遍历时,因为in对字符串不管用,所以要对传过来的字符串进行Json化,代码如下

    $.get(url,function(data){
                obj= $.parseJSON(data);    //Json化之后可以用each遍历
                $.each(obj, function(k,v) {
                    alert(v.id);
                });
       });