jQuery ajax调用webservice注意事项


Posted in jQuery onOctober 08, 2017

jquery ajax调用webservice(C#)要注意的几个事项:

1、web.config里需要配置2个地方

<httpHandlers>
   <remove verb="*" path="*.asmx"/>
   <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpHandlers>

在<system.web></system.web>之间加入

<webServices>
   <protocols>
    <add name="HttpPost" />
    <add name="HttpGet" />
   </protocols>
  </webServices>

2.正确地编写webserivce的代码

/// <summary>
  /// UserValidate 的摘要说明
  /// </summary>
  [WebService(Namespace = "http://tempuri.org/")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
   [System.Web.Script.Services.ScriptService]
  public class UserValidate : System.Web.Services.WebService
  {
    DFHon.Content.Common.rootPublic rp = new DFHon.Content.Common.rootPublic();
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string ValidateUserLogState()
    {
      string result = "";
      HttpCookie cookie = HttpContext.Current.Request.Cookies["DHFonMenberInfo"];
      if (cookie != null)
      {
        string username = System.Web.HttpUtility.UrlDecode(cookie["MenberName"]);
        int ipoint = 0;
        int gpoint = 0;
        try
        {
          DataTable dt = UserBll.ExecuteUserAllInfo(username);

          if (dt.Rows.Count > 0)
          {
            ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString());
            gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString());
          }
        }
        catch
        { }
        result = "{'user':{'id':'" + cookie["UserId"] + "','name':'" + username + "','message':'" + rp.getUserMsg(DFHon.Global.CurrentCookie.UserName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}";
      }
      else
      {
        result = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
      }
      return result;
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string UserLogin(string userName, string userPwd)
    {
      string returnVal = "";
      try
      {
        GlobalUserInfo info;
        DFHon.Content.UserLogin _UserLogin = new DFHon.Content.UserLogin();
        EnumLoginState state = _UserLogin.PersonLogin(HttpUtility.UrlDecode(userName), userPwd, out info);
        if (state == EnumLoginState.Succeed)
        {
          DFHon.Global.CurrentCookie.Set(info);
          DFHon.API.PDO.DiscuzNT.PassportLogin.UserLogin(Server.UrlDecode(userName), userPwd, -1);
          int ipoint = 0;
          int gpoint = 0;
          DataTable dt = UserBll.ExecuteUserAllInfo(userName);

          if (dt.Rows.Count > 0)
          {
            ipoint = int.Parse(dt.Rows[0]["iPoint"].ToString());
            gpoint = int.Parse(dt.Rows[0]["gPoint"].ToString());
          }
          returnVal = "{'user':{'id':'" + info.UserId.ToString() + "','name':'" + info.UserName + "','message':'" + rp.getUserMsg(userName) + "','ipoint':'" + ipoint.ToString() + "','gpoint':'" + gpoint.ToString() + "'}}";
        }
        else
        {
          int ids = 0;//状态:-2用户被锁定 -1用户名密码错误
          switch (state)
          {
            case EnumLoginState.Err_Locked:
              ids = -2;
              break;
            case EnumLoginState.Err_UserNameOrPwdError:
              ids = -1;
              break;
            default:
              break;
          }
          returnVal = "{'user':{'id':'" + ids + "','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
        }
      }
      catch
      {
        returnVal = "{'user':{'id':'0','name':'','message':'0','ipoint':'0','gpoint':'0'}}";
      }
      return returnVal;
    }
    [WebMethod]
    public string UserLogout()
    {
      if (HttpContext.Current.Request.Cookies["DHFonMenberInfo"] != null)
      {
        HttpCookie cookie = new HttpCookie("DHFonMenberInfo");
        cookie.Expires = System.DateTime.Now.AddDays(-1);
        cookie.Domain = DFHon.Config.BaseConfig.getV("weblogin");
        HttpContext.Current.Response.AppendCookie(cookie);
      }
      return "1";
    }
    DFHon.Content.user UserBll = new DFHon.Content.user();
    [WebMethod]
    public string ValidateUserEmail(string email)
    {
      string result = "0";//返回的结果 -2邮箱为空 -1邮箱格式不正确 0邮箱存在 1填写正确
      if (string.IsNullOrEmpty(email))
      {
        result = "-2";//邮箱为空
      }
      else if (!IsValidEmail(email))
      {
        result = "-1";//邮箱格式不正确
      }
      else if (UserBll.sel_useremail(email) > 0)
      {
        result = "0";//邮箱存在
      }
      else
      {
        result = "1";//可以注册
      }
      return result;
    }

    [WebMethod]
    public string ValidateUserName(string username)
    {
      string result = "0";//返回值:-1用户名长度为2-16;0用户名存在;1可以注册
      if (username == "" || username == null || username.Length < 2 || username.Length > 16)
      {
        result = "-1";
      }
      else if (UserBll.sel_username(username) != 0)
      {
        result = "0";
      }
      else
      {
        result = "1";
      }
      return result;
    }

    public bool IsValidEmail(string strIn)
    { // Return true if strIn is in valid e-mail format. 
      return System.Text.RegularExpressions.Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
    }
  }

WebService

<script>
    $(function() {
      $("#userloging").show();
      //登录框处理开始
      //加载登录状态
      $.ajax({
        type: "POST", //访问WebService使用Post方式请求
        contentType: "application/json;charset=utf-8", //WebService 会返回Json类型
        url: "/API/Service/UserValidate.asmx/ValidateUserLogState", //调用WebService
        data: "{}", //Email参数
        dataType: 'json',
        beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
        error: function(x, e) { },
        success: function(response) { //回调函数,result,返回值
          $("#userloging").hide();
          var json = eval('(' + response.d + ')');
          var userid = json.user.id;
          if (userid > 0) {
            $("#spanusername").html(json.user.name);
            $("#spanmessagenum").html(json.user.message);
            $("#userloginsucced").show();
            $("#userloginbox").hide();
          }
        }
      });
      //登录
      $("#userlogbutton").click(function() {
        
        var username = $("#username").val();
        var userpwd = $("#userpassword").val();
        if (username != "" && userpwd != "") {
          $("#userloging").show();
          $.ajax({
            type: "POST", //访问WebService使用Post方式请求
            contentType: "application/json;charset=utf-8", //WebService 会返回Json类型
            url: "/API/Service/UserValidate.asmx/UserLogin", //调用WebService
            data: "{userName:'" + username + "',userPwd:'" + userpwd + "'}", //Email参数
            dataType: 'json',
            beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
            error: function(x, e) {
            },
            success: function(result) { //回调函数,result,返回值
              $("#userloging").hide();
              var json = eval('(' + result.d + ')');
              var userid = json.user.id;
              if (userid > 0) {
                $("#spanusername").html(json.user.name);
                $("#spanmessagenum").html(json.user.message);
                $("#userloginsucced").show();
                $("#userloginbox").hide();
              }
              else {
                switch (userid) {
                  case -2:
                    alert("用户被锁定!请30分钟后再登录!");
                    $("#username").focus();
                    break;
                  case -1:
                    alert("用户名或密码错误!请核对您的用户名和密码!");
                    $("#userpassword").focus();
                    break;
                  default:
                    alert("登录失败!请核对您的用户名和密码之后重试!");
                    $("#userpassword").focus();
                    break;
                }
              }
            }
          });
        }
        else if (username == "") {
          alert("用户名不能为空!");
          $("#username").focus();
        }
        else if (userpwd == "") {
          alert("密码不能为空!");
          $("#userpassword").focus();
        }
      });
      //退出
      $("#logout").click(function() {
        $("#userloging").show();
        $.ajax({
          type: "POST", //访问WebService使用Post方式请求
          contentType: "application/json;utf-8", //WebService 会返回Json类型
          url: "/API/Service/UserValidate.asmx/UserLogout", //调用WebService
          data: "{}", //Email参数
          dataType: 'json',
          beforeSend: function(x) { x.setRequestHeader("Content-Type", "application/json; charset=utf-8"); },
          success: function(result) { //回调函数,result,返回值
            $("#userloging").hide();
            if (result.d > 0) {
              $("#userloginsucced").hide();
              $("#userloginbox").show();
            }
          }
        });

      }); //登录框处理结束

    });
    </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
vue中如何引入jQuery和Bootstrap
Apr 10 jQuery
jQuery Validate表单验证插件实现代码
Jun 08 jQuery
详解使用jQuery.i18n.properties实现js国际化
May 04 jQuery
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
jQuery实现的五星点评功能【案例】
Feb 18 jQuery
JQuery Ajax跨域调用和非跨域调用问题实例分析
Apr 16 jQuery
jquery操作select常见方法大全【7种情况】
May 28 jQuery
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
jQuery Raty星级评分插件使用方法实例分析
Nov 25 jQuery
JavaScript或jQuery 获取option value值方法解析
May 12 jQuery
jQuery完成表单验证的实例代码(纯代码)
Sep 30 #jQuery
jquery之基本选择器practice(实例讲解)
Sep 30 #jQuery
jquery鼠标悬停导航下划线滑出效果
Sep 29 #jQuery
jQuery选择器之子元素过滤选择器
Sep 28 #jQuery
jQuery选择器之属性过滤选择器详解
Sep 28 #jQuery
jquery实现左右轮播图效果
Sep 28 #jQuery
JQuery 选择器、DOM节点操作练习实例
Sep 28 #jQuery
You might like
如何实现给定日期的若干天以后的日期
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
Javascript之文件操作
2007/03/07 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
2017/06/18 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
js实现表格单列按字母排序
2020/08/12 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
儿童编程python入门
2018/05/08 Python
Python变量类型知识点总结
2019/02/18 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python创建临时文件和文件夹
2020/08/05 Python
深入分析python 排序
2020/08/24 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
九年级语文教学反思
2014/02/04 职场文书
2015年小学数学教师工作总结
2015/05/20 职场文书