• 【AngularJS】通过jsonp与webmethod交互,实现ajax验证


    服务端配置

    1:新建一个asp.net的网站

    2: 创建一个服务文件:LoginService.asmx

    注意:记得取消[System.Web.Script.Services.ScriptService]的注释

    因为要使用jsonp来达到跨域访问,所以要声明输出类型和加上callback函数前缀。

    using System.Web.Services;
    
    namespace testService
    {
        /// <summary>
        /// LoginService 的摘要说明
        /// </summary>
        [WebService(Namespace = "zhexian.com")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
        [System.Web.Script.Services.ScriptService]
        public class LoginService : System.Web.Services.WebService
        {
            [WebMethod]
            public void CheckUserNameExist(string username)
            {
                Context.Response.ContentType = "application/x-javascript";
                string result = username == "kimmy" ? "true" : "false";
                string callBackName = Context.Request.QueryString["callback"];
                Context.Response.Write(callBackName + "({"isUnique":"" + result + ""})");
            }
        }
    }

    3:配置web.config

    在web.config, <system.web>下,加入字段

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

    网页配置

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>入门入门</title>
    <link rel="stylesheet" href="http://cdn.jsdelivr.net/foundation/4.3.2/css/foundation.min.css">
    <style type="text/css">
    </style>
    </head>
    <body ng-app="myApp">
    <form name="singnupForm" novalidate ng-submit="signupForm()">
    <fieldset>
        <legend>注册</legend>
     <div>
    
      <div class="row">
          <div class="large-12 columns">
              
              <input type="text" placeholder="用户名" name="name" ng-model="user.name" ng-minlength="2" ng-maxlength="20" ensure-unique="name"  required />
    
          <div class="error" ng-show="singnupForm.name.$dirty && singnupForm.name.$invalid">
              <small class="error" ng-show="singnupForm.name.$error.required">
                  请录入用户名
              </small>
           <small class="error" ng-show="singnupForm.name.$error.minlength">
            最少2个字符
           </small>
           <small class="error" ng-show="singnupForm.name.$error.maxlength">
               最多20个字符
           </small>
           <small class="error" ng-show="singnupForm.name.$error.unique">
               用户名已经存在
           </small>
          </div>
      </div>
      </div>
    
      <div class="row">
          <div class="large-12 columns">
      <input type="password" placeholder="密码" name="pwd" ng-model="user.pwd" ng-minlength="5" required />
          <div class="error" ng-show="singnupForm.pwd.$dirty && singnupForm.pwd.$invalid">
          <small class="error" ng-show="singnupForm.pwd.$error.required">
                  请录入密码
              </small>
           <small class="error" ng-show="singnupForm.pwd.$error.minlength">
            最少5个字符
           </small>
          </div>
          </div>
     </div>
    
    <div class="row">
          <div class="large-12 columns">
          <input type="email" placeholder="邮件地址" name="email" ng-model="user.email" ng-minlength="5" ng-maxlength="20" required />
       <div class="error" ng-show="singnupForm.email.$dirty && singnupForm.email.$invalid">
          <small clss="error" ng-show="singnupForm.email.$error.required">
              请录入邮件地址
          </small>
          <small class="error" ng-show="singnupForm.email.$error.email">
              邮件地址不正确
          </small>
          <small class="error" ng-show="singnupForm.email.$error.minlength">
              最少3个字符
          </small>
          <small class="error" ng-show="singnupForm.email.$error.maxlength">
              最长20个字符
          </small>
      </div>
     </div>
     </div>
    
    <div class="row">
          <div class="large-12 columns">
          <input type="number" placeholder="年龄" name="age" ng-model="user.age" ng-minlength="1" required />
       <div class="error" ng-show="singnupForm.age.$dirty && singnupForm.age.$invalid">
          <small clss="error" ng-show="singnupForm.age.$error.required">
              请录入年龄
          </small>
          <small class="error" ng-show="singnupForm.age.$error.number">
              年龄格式不正确
          </small>
      </div>
      <button type="submit" ng-disabled="singnupForm.$invalid" class="button radius">submit</button>
     </div>
     </div>
    
    </fieldset>
    </form>
    <script src="angular.min.js"></script>
    </body>
    </html>

    JS部分,加在Body前面

    <script type="text/javascript">
        var myApp = angular.module('myApp',[]);
    
        myApp.directive('ensureUnique',function ($http) {
    
             return {
                 require:'ngModel',
                 link:function(scope,ele,attrs,c){
                   scope.$watch(attrs.ngModel,function (n) {
    
                       if (!n) 
                           return;
    
                 $http.jsonp(
                    'http://192.168.18.114:3301/LoginService.asmx/CheckUserNameExist?callback=JSON_CALLBACK',
                    {
                        params  :{'username':scope.user.name}
                    }
                   ).success(function (data) {
                   var isUnique = data && data.isUnique && data.isUnique.toLowerCase()=="true";
    
                       c.$setValidity('unique',isUnique);
                   }).error(function  (data) {
                   
                        c.$setValidity('unique',false);
                   });
                 });
              }
             };
        });
    </script>
  • 相关阅读:
    G
    F
    E
    D
    机器学习第二次作业
    机器学习第一次作业
    机器学习作业一
    软工实践个人总结
    第11组 Beta版本演示
    第11组 Beta冲刺(5/5)
  • 原文地址:https://www.cnblogs.com/kimmy/p/4140429.html
Copyright © 2020-2023  润新知