在使用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:
<script type="text/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); } }); }); }); </script>
aspx.cs
public 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:请求成功后的回调函数。你 可以在这里对返回的数据做任意处理。