ajax调用webservice方法及配置

本文介绍了如何使用AJAX调用WebService进行用户登录验证,包括前端jQuery的调用方法和后端WebService的配置。强调了跨域问题,以及在配置中添加HttpPost、HttpGet等协议的重要性。同时,展示了具体的前后端交互代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:方法仍旧不可跨域,请确认客户端和服务端在同一域名下(以IP+端口号的形式的地址只要端口号不同也视为跨域)

前端

1.页面引用jquery库

<script type="text/javascript" src="script/jquery-1.10.2.min.js" ></script>

2.调用方法模拟模拟用户登陆

function checkuser() {
    var p = {};
    p.userid = $("#UID").val();
    p.password = $("#Password").val();
    var ps = JSON.stringify(p);
    $.ajax({
        type: "POST",
        async: "false",
        contentType: "application/json;charset=utf-8",
        url: "http://192.168.44.1/AccountLock/CommonService.asmx/User_Login",
        data: ps,
        dataType: 'json',
        beforeSend: function(x) {
            x.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        },
        error: function(x, e) {
            alert("网络忙,请稍后再试");
        },
        success: function(result) {
            var json = eval('(' + result.d + ')');
            if (json.OperateResult == "success" && json.ResultList.length > 0) {
                var enablelogin = json.ResultList[0].IsEnable;
                if (enablelogin == "false") {
                    alert(json.ResultList[0].Info);
                    return false;
                } else {
                    $("#Button1").click();
                }


            } else {
                alert(json.StackTrace);
            }
        }
    });
}

后端

webservice的config文件添加如下配置

<system.web>
    <compilation/>
    <webServices>
      <protocols>
        <add name="HttpPost"/>
            <add name="HttpGet"/>
            <add name="HttpSoap"/>
            <add name="Documentation"/>
      </protocols>
    </webServices>
<httpHandlers>
      <remove verb="*" path="*.asmx"/>
 <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpHandlers>
  </system.web>


注意:httpHandlers中的程序集版本要和项目Framework的版本匹配,我的项目是3.5

代码中:首先确保下行注释已经去掉

    [System.Web.Script.Services.ScriptService]

方法追加[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

定义的两个参数名称要与ajax中post的两个属性完全一致

#region 用户登陆验证
        /// <summary>
        /// 用户登陆验证
        /// </summary>
        /// <param name="userid">用户登录名</param>
        /// <param name="password">用户密码</param>
        /// <returns></returns>
        [WebMethod(Description = "用户登陆验证")]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string User_Login(string userid, string password)
        {
            //30分钟内密码输入错误三次,当日锁定该账号,转天解锁或者联系管理员解锁
            try
            {
                DataTable sdt = new DataTable();
                sdt.Columns.Add("Info", System.Type.GetType("System.String"));
                sdt.Columns.Add("IsEnable", System.Type.GetType("System.String"));
                DbHelperSQL.connectionString = masterCon;
                string today = System.DateTime.Now.ToString("yyyy-MM-dd");
                string tomorrow = System.DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
                string info = "";
                string IsEnable = "";
                SqlParameter[] cmdParms = new SqlParameter[1];
                cmdParms[0] = new SqlParameter("USER_UID", SqlDbType.VarChar);
                cmdParms[0].Value = userid;
                //1.先验证当前账号是否处于锁定状态
                string sqllocked = "select userid from [BUA].[dbo].[OA_User_Locked] where userid=@USER_UID and SetTime = '" + today + "'";
                DataTable lockdt = DbHelperSQL.Query(sqllocked, cmdParms).Tables[0];
                if (lockdt.Rows.Count > 0)
                {
                    //当日处于锁定
                    info = "当前账号处于锁定状态,请改日尝试登录或联系管理员(25250282)解决";
                    IsEnable = "false";
                }
                else
                {
                    string sql = @"SELECT USER_PASSWD from [BUA].[dbo].[BUA_USER] where USER_UID=@USER_UID";
                    DataTable dt = DbHelperSQL.Query(sql, cmdParms).Tables[0];
                    if (dt.Rows.Count > 0)
                    {
                        //账号存在,验证密码是否正确
                        if (dt.Rows[0]["USER_PASSWD"].ToString() == password)
                        {
                            //密码正确,设置登陆表中当天所有的记录为无效,删除锁定表对应记录
                            sql = "delete from [BUA].[dbo].[OA_Log_Login] where userid='" + userid + "' and loginTime>='" + today + "' and loginTime<='" + tomorrow + "'";
                            DbHelperSQL.ExecuteSql(sql);
                            info = "";
                            IsEnable = "true";
                        }
                        else
                        {
                            //密码错误,插入错误记录
                            sql = "insert into [BUA].[dbo].[OA_Log_Login](userid,loginTime) values('" + userid + "','" + System.DateTime.Now + "')";
                            DbHelperSQL.ExecuteSql(sql);
                            sql = "select id from [BUA].[dbo].[OA_Log_Login] where userid=@USER_UID and loginTime>='" + today + "' and loginTime<='" + tomorrow + "'";
                            DataTable logindt = DbHelperSQL.Query(sql, cmdParms).Tables[0];
                            if (logindt.Rows.Count >= 3)
                            {
                                //连续输错三次密码,锁定该账号
                                sql = "insert into [BUA].[dbo].[OA_User_Locked](userid,SetTime) values('" + userid + "','" + today + "')";
                                DbHelperSQL.ExecuteSql(sql);
                                info = TimeSpan + "分钟内密码连续输入错误三次,根据规定,今日您的账号已被系统锁定,清改日登陆或联系管理员";
                            }
                            else
                            {
                                info = "密码错误,请核对后重新填写";
                            }
                            IsEnable = "false";
                        }
                    }
                    else
                    {
                        //账号不存在
                        info = "该账号不存在,请核对后重新填写";
                        IsEnable = "false";
                    }
                }
                DataRow dr = sdt.NewRow();
                dr["Info"] = info;
                dr["IsEnable"] = IsEnable;
                sdt.Rows.Add(dr);
                return GetSuccessData(sdt);
            }
            catch (Exception ex)
            {
                return GetFailData(ex.ToString());
            }


        }
        #endregion

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值