代码改变世界

Jquery AJax调用asp.net后台静态方法

2010-12-10 10:57  watsonchia  阅读(1752)  评论(0编辑  收藏  举报

有了Asp.net Ajax的支持,Jquery Ajax可以调用asp.net页面静态后台方法,类似调用WebService。后台方法必须为static,访问范围为protect/public:

//System.Web.Services
//System.Web.Script.Services
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string test(string name)
{
    return name + " " + DateTime.Now.ToString();
}

需要注意的是,静态方法无法访问aspx上的服务端控件,这是可预测,因为并不会每次ajax调用都把带个页面post向服务端。

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。

前台调用方式为:

<input id="Button1" type="button" value="button" onclick="test();" />
<script type="text/javascript">
    function test() {
        $.ajax({
            url: "Default.aspx/test",
            type: "POST",
            data: "{'name':'myname'}",
            contentType: "application/json",
            dataType: "json",
            success: function (data) {
                alert(data.d);
            }
        });
    }
</script>

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