在使用ajax做异步请求时,都要建一个aspx或者ashx页面配合使用,如此一来,如果在一个项目中ajax程序多了,势必会产生一堆的附加页面,虽然于程序本身无碍,但那一堆文件看上去总觉得有伤大雅。那么可不可以丢掉这些.ashx和.aspx,选择一种更简练的方式来做ajax程序呢。
答案是肯定的,那就是:WebMethod。将普通页面的方法公布为WebMethod,以Javascript形式访问。
1 方法要public static修饰,返回类型最好是string。
2 方法前添加[WebMethod] 特性。
3 Client端访问时要使用Post方法,和Json作为数据形式进行交互。否则会整页HTML返回。
4 在jQuery访问时,回调中的data.d才时真正的返回内容。
5 访问URL为: http://abc.com/abc.aspx/GetTime 如有个GetTime的公共静态方法。
JavaScript:
$(function () {
$("#btn").click(function () {
var num1 = $("#num1").val();
var num2 = $("#num2").val();
$.ajax({
type: "POST",//
url: "Default.aspx/Add",
data: "{num1:'"+num1+"',num2:'"+num2+"'}",
contentType: "application/json",
dataType: "json",
success: function (data) {
$("#num3").val(data.d);
},
error: function (msg) {
alert(msg.status);
}
});
});
});
aspx.cspublic partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static int Add(int num1, int num2)
{ return num1 + num2; }
}
这里对几个参数做一下简单的说 明,type:请求的类型,这里必须用post 。WebMethod方法只接受post类型的请求。contentType: 发送信息至服务器时内容编码类型。我们这里一定要用application/json 。url:请求的服务器端处理程序的路径,格式为"文 件名(含后缀)/方法名"data:参数列表。注意,这里的参数一定要是json格式的字符串,记住是字符串格式,如:" {aa:11,bb:22,cc:33 , ...}"。如果你写的不是字符串,那jquery会把它实序列化成字符串,那么在服务器端接受到的就不是json格式了,且不能为空,即使没有参数也要 写成"{}",如上例。dataType:服务器返回的数据类型。必须是json,其他的都无效。因为 webservice 是一json格式返回数据的,其形式为:{"d":"......."}。success:请求成功后的回调函数。你 可以在这里对返回的数据做任意处理。