Asp.net中ajax调用后台方法

这个当然不用说大家都知道的一种就是ajax调后台的方法。
1、有参数的方法调用
示例代码如下:
前台jQuery代码:
$(function() { 
 这个当然不用说大家都知道的一种就是ajax调后台的方法。 
1、有参数的方法调用

示例代码如下:

前台jQuery代码:

$(function() { 
  var browers = browersEstimate(); 
  var params = ‘{browersType:"‘ + browers + ‘"}‘; 
  $.ajax({ 
      type: "POST",                   //提交方式 
      url: "Default.aspx/RecordData",   //提交的页面/方法名 
      data: params,                   //参数(如果没有参数:null) 
      dataType: "json",                   //类型 
      contentType: "application/json; charset=utf-8",      
      success: function(data) {      
              //返回的数据用data.d获取内容      
                alert(data.d);      
          },      
          error: function(err) {      
              alert(err);      
         });    
     });

这个是jquery下Ajax方法调用后台方法。

这个方法有几点需要说明:

type方式必须是post,再有就是后台的方法必须是静态的,方法声明要加上特性[System.Web.Services.WebMethod()],传递的参数个数也应该和方法的参数相同。

asp.net后台方法:

[System.Web.Services.WebMethod()] 
    public static void RecordData(string browersType) 
    { 
        if (BrowserControl.Counters == null) 
        { 
            BrowserControl.InitData(0); 
        }

if (browersType == "") 
        { 
            browersType = "Other"; 
        }

BrowserControl.AddOneByBrowserType(browersType); 
        if (BrowserControl.WriteInDataBase()) 
        { 
            BrowserControl.OldTotalCount = BrowserControl.Counters.Count; 
        } 
        else 
        { 
            BrowserControl.OldTotalCount = 0; 
        } 
    }

2、无参数的方法调用

示例代码:

前台jQuery代码

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

asp.net后台方法

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

3、返回数组方法的调用

示例代码:

asp.net 后台代码:

[System.Web.Services.WebMethod()]    
public static List GetArray()      
{      
  List li = new List();      
for (int i = 0; i < 10; i++)      
        li.Add(i + "");      
return li;      
}

前台JQuery代码:

/**/      
$(function() {      
    $("#btnOK").click(function() {      
        $.ajax({      
            type: "Post",      
            url: "data.aspx/GetArray",      
            contentType: "application/json; charset=utf-8",      
            dataType: "json",      
            success: function(data) {      
                //插入前先清空ul      
                $("#list").html("");      
                //递归获取数据      
                $(data.d).each(function() {      
                    //插入结果到li里面      
                    $("#list").append("" + this + "");      
                });      
                alert(data.d);      
            },      
            error: function(err) {      
                alert(err);      
            }      
        });      
        //禁用按钮的提交      
        return false;      
    });      
});

4、返回Hashtable方法的调用

using System.Collections;      
[System.Web.Services.WebMethod()]     
public static Hashtable GetHash(string key,string value)      
{      
    Hashtable hs = new Hashtable(); 
    hs.Add("www", "yahooooooo");      
    hs.Add(key, value);           
    return hs;      
}

前台JQuery代码:

$(function() {      
    $("#btnOK").click(function() {      
        $.ajax({      
            type: "Post",      
            url: "data.aspx/GetHash",      
            //记得加双引号       
            data: "{ ‘key‘: ‘haha‘, ‘value‘: ‘哈哈!‘ }",      
            contentType: "application/json; charset=utf-8",      
            dataType: "json",      
            success: function(data) {      
                alert("key: haha ==> "+data.d["haha"]+" key: www ==> "+data.d["www"]);      
            },      
            error: function(err) {      
                alert(err + "err");      
            }      
        });      
        //禁用按钮的提交      
        return false;      
    });      
});

5、操作xml

xnl文件示例:    
 <?xml version="1.0" encoding="utf-8" ?>     
<data>     
  <item>     
    <id>1</id>     
    <name>qwe</name>     
  </item>     
  <item>     
    <id>2</id>     
    <name>asd</name>     
  </item>     
</data>

Jquery代码:

$(function() {      
    $("#btnOK").click(function() {      
        $.ajax({      
            url: "XMLtest.xml",      
            dataType: ‘xml‘, //返回的类型为XML ,和前面的Json,不一样了      
            success: function(xml) {      
                //清空list      
                $("#list").html("");      
                //查找xml元素      
                $(xml).find("data>item").each(function() {

$("#list").append("id:" + $(this).find("id").text() +"");

$("#list").append("Name:"+ $(this).find("name").text() + "");      
                })      
            },      
            error: function(result, status) { //如果没有上面的捕获出错会执行这里的回调函数      
                alert(status);      
            }      
        });      
        //禁用按钮的提交      
        return false;      
    });      
});

6、调后台的另外一种方法:

js代码示例:

function test() { 
        var browers = browersEstimate(); 
       __doPostBack("CE_RecordData", browers); 
   }

后台页面代码示例:

protected override void OnLoad(EventArgs e) 
    { 
        base.OnLoad(e); 
        if (this.IsPostBack) 
        { 
            if ((Request.Form["__EVENTTARGET"] != null) && (Request.Form["__EVENTTARGET"] != "")) 
            { 
                if (Request.Form["__EVENTTARGET"].Substring(0, 3) == "CE_") 
                { 
                    String strEventArgument = Request.Form["__EVENTARGUMENT"]; 
                    Type type = this.GetType(); 
                    MethodInfo mi = type.GetMethod(Request.Form["__EVENTTARGET"], BindingFlags.Instance | BindingFlags.NonPublic); 
                    if (mi != null) 
                    { 
                        mi.Invoke(this, new object[] { strEventArgument }); 
                    } 
                } 
            } 
        } 
    }

protected void CE_RecordData(string browersType) 
    {   -----你需要做的操作----- }

如上代码解释:主要是js代码里面的方法名要与后台一致,方法参数个数也要一致,最重要的是页面的OnLoad事件的重写。在这里面调用的父类的OnLoad事件,重要是利用反射获取要调用的方法,和传递过来的参数。

type.GetMethod(Request.Form["__EVENTTARGET"], BindingFlags.Instance | BindingFlags.NonPublic);这一句里面的参数设置不能变更。必须是实例Instance和不公开的方法。可以看到对应的 CE_RecordData方法是受保护的。

时间: 2024-10-17 09:25:59

Asp.net中ajax调用后台方法的相关文章

webform中 ajax调用后台方法(非webservice)

后台: public partial class Ajax_ShoppingCart : System.Web.UI.Page { bookdbDataContext bdc = Connect.bookdb(); protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { if(Request.Form["method"]!=null) { switch (Request.Form["me

asp.net如何在前台利用jquery Ajax调用后台方法

一 :最近因为帮同事开发项目使用到了asp.net,而我又想实现Ajax异步请求....从网上查询了一下资料之后,原来在asp.net中利用Ajax调用后台方法同样很简单,为了便于自己以后查看,特将此整理后记录如下 先贴上前台代码如下: 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="aspnetAjax.In

ASP.NET MVC AJAX调用JsonResult方法并返回自定义错误信息

一.如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): public JsonResult FuckJson() { return new JsonResult() { Data = new List<string>() { "fuck", "shit" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }

Web传输,前台的参数数据量过大[json格式的字符串],可能达到几M,ajax调用后台方法时

eb传输,前台的参数数据量过大[json格式的字符串],可能达到几M,ajax调用后台方法时,无法传递问题分析:tomcat上默认post提交大小为2M,左右,超过这个大小了,就会传值不成功解决方法:修改post提交大小的限制大小,在server.xml上修改,如下:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8

Asp.net中JQuery、ajax调用后台方法总结

通过上一篇文章实例的实现,整个过程当中学习到很多知识点,了解了Jquery.Ajax在asp.net中的运用,加以总结,其实原理都是一样的,理解了一种,其他的注意很少的区别就可以了.灵活运用: 1.有参数的方法调用 示例代码如下:前台jQuery代码:$(function() {  知道的一种就是ajax调后台的方法. 1.有参数的方法调用 示例代码如下: 前台jQuery代码: [plain] view plaincopyprint? <span style="font-size:18p

ASP.NET中JavaScript 调用后台代码

前序:在不需要右击页面或回发的情况下刷新页面,即JS调用后台代码: 方法一:调用隐藏服务端按钮的点击事件 1.在前端放一个隐藏按钮,将需要调用的后台代码写入OnClick事件中; 2.在前台写一个js函数,函数体为document.getElementById("<%=btnID.ClientID%>").click(); 3.在需要刷新的地方调用js函数,即可调用按钮OnClick事件: 4.此方法适用无返回值: 方法二:JS中直接用<%=MethodName()%

jquery + ajax调用后台方法

前台js: var parameter = ""; $.ajax({ type: "POST", //提交方式 url: "Default.aspx/Search", //提交的页面/方法名 data: "{text:'" + parameter + "'}", contentType: "application/json", //返回json数据 success: function(d

前台JS(Jquery)调用后台方法 无刷新级联菜单示例

前台用AJAX直接调用后台方法,老有人发帖提问,没事做个示例 下面是做的一个前台用JQUERY,AJAX调用后台方法做的无刷新级联菜单 http://www.dtan.so CasMenu.aspx页面: [html] view plaincopyprint? <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CasMenu.aspx.cs" Inherits="_De

ASP.NET中JQuery+AJAX调用后台

做订餐系统手机端时,遇到一个问题,实现登录功能时,我要调用后台的方法进行验证和判断.我们应用的是webForm进行开发的,正常情况下只要绑定按钮的方法,前后台对应就可以实现.但是,手机端应用MUI样式之后,就不适用于这种情况了.基于这个问题,我们使用JQuery+Ajax技术,其实MUI中也自带ajax技术. 实现过程: webForm代码: function login() { var name = document.getElementById("username").value;