这节我们来看下如何实现AJAX调用页面后台方法和web服务定义的方法,下面通过验证用户的例子,先讲解如何调用页面后台方法,具体实现步骤如下:
1.新建Recipe23.aspx页面。
2.在该页面的后台文件Recipe23.aspx.cs中添加引用
using System.Web.Services;
3.定义静态数组和初始化数据
public static string[] userNameArrray;
protected void Page_Load(object sender, EventArgs e) { userNameArrray = new string[5] { "KenLee01", "KenLee02", "KenLee03", "KenLee04", "KenLee05" }; }
4.定义验证用户名合法性的静态方法
/// <summary> /// 验证用户是否合法 /// </summary> /// <remarks> /// AJAX如果要直接调用该方法,需要添加[WebMethod()],并定义为静态方法 /// </remarks> /// <param name="sUserName">用户名</param> /// <returns>返回结果</returns> [WebMethod()] public static bool CheckUserName(string sUserName) { // 如果用户存在,就验证合法 if (userNameArrray.Contains(sUserName)) { return true; }
return false; }
5.在Recipe.aspx里面实现界面结构代码如下
<form id="form1" runat="server"> <div> <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox> <asp:Button ID="btnCheck" runat="server" Text="验证用户" /> </div> </form>
6.在Recipe.aspx里面实现AJAX调用页面后台用户验证方法CheckUserName的脚本代码如下
<script type="text/javascript"> $(function () { $("#btnCheck").click(function (e) { e.preventDefault();
// 首先判断用户名是否为空,并给出提示 if ($("#txtUserName").val() == "") { alert("请输入用户名!"); } else { sendData($("#txtUserName").val()); } });
// 定义一个AJAX请求方法 function sendData(sUserName) { // 访问页面后台方法 var loc = window.location.href; $.ajax({ type: "POST", url: loc + "/CheckUserName", // sUserName要跟请求方法CheckUserName定义的参数名称要保持一致 // json数据格式是由一对键值构成,如{"name1":"value1", "name2":"value2"} data: '{ "sUserName": "' + sUserName + '"}', // 发送信息至服务器时内容编码类型 contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { // AJAX响应被包装到一个d对象里,如{"d":true}, // 因此需要用到msg.d来获取请求返回的布尔值 if (msg.d) { alert("验证用户成功!"); } else { alert("验证用户失败!"); } }, error: function (xhr, textStatus, errorThrown) { alert("AJAX错误:" + errorThrown); } }); } }); </script>
7.运行程序后显示页面如下:
8.输入用户名KenLee10:
9.输入用户名KenLee01:
10.还可以通过Firebug观察AJAX请求响应的数据,请求数据如下:
11.请求响应的JSON数据:
下面再来看下AJAX如何调用Web服务:
1.创建Web服务用户验证的文件UserNameWS.asmx,必须添加[System.Web.Script.Services.ScriptService],实现用户验证代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services;
/// <summary> ///UserNameWS 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class UserNameWS : System.Web.Services.WebService {
public UserNameWS () {
//如果使用设计的组件,请取消注释以下行 //InitializeComponent(); }
/// <summary> /// 验证用户是否合法 /// </summary> /// <remarks> /// AJAX如果要直接调用该方法,需要添加[WebMethod()],并定义为静态方法 /// </remarks> /// <param name="sUserName">用户名</param> /// <returns>返回结果</returns> [WebMethod] public bool CheckUserName(string sUserName) { string[] userNameArrray = new string[5] { "KenLee01", "KenLee02", "KenLee03", "KenLee04", "KenLee05" }; // 如果用户存在,就验证合法 if (userNameArrray.Contains(sUserName)) { return true; }
return false; } }
2.修改Recipe23.aspx的脚本代码sendData函数,只需修改loc访问地址:
// 定义一个AJAX请求方法 function sendData(sUserName) { // 访问页面后台方法 // var loc = window.location.href; // 访问Web服务 var loc = "UserNameWS.asmx"; ........
简单完成上面两步,就可以直接调用web服务里面定义的方法了。具体显示的效果图,和上面介绍的AJAX访问页面方法的效果图是一样的,这里就不用重复写了。
|
请发表评论