2015-02-15 4 views
1

Я использую Parsley Remote validation с angularJS..Использование валидатора async с добавлением новой пользовательской формы работает нормально, оно использует API и проверяет, существует ли имя пользователя, и также, если имя пользователя есть, оно возвращает статус 200, который не равен 404, и появляется сообщение об ошибке. НО при отправке формы, если я проверяю статус form.isvalid, он возвращает true, это только проверка удаленных опций NON. Я застрял там.Parsley Удаленная проверка не препятствует отправке формы

здесь является веб-формы

<form class="form-horizontal form-label-left" method="post" id="AddUserForm" 
      data-ui-jq="parsley" 
      data-parsley-remote 
      data-parsley-priority-enabled="false" 
      novalidate="novalidate"> 
      <fieldset> 
       <legend> 
        By default validation is started only after at least 3 characters have been input. 
       </legend> 
       <div class="form-group"> 
        <label class="control-label col-sm-3" for="basic">User Name</label> 
        <div class="col-sm-9"> 
         <input type="text" name="userName" class="form-control" data-ng-model="user.userName" value="" 
          data-parsley-remote 
          data-parsley-remote-validator='checkusername' 
          data-parsley-trigger="focusout" 
          data-parsley-remote-message="User name is already registerd in the system" 
          required="required" /> 

         <span class="help-block"> 
          Username must be unique 
         </span> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label class="control-label col-sm-3" for="email"> 
         E-mail 
        </label> 
        <div class="col-sm-9"> 
         <input type="email" id="email" name="email" class="form-control" data-ng-model="user.email" 
          data-parsley-remote 
          data-parsley-remote-validator='checkemail' 
          data-parsley-trigger="focusout" 
          data-parsley-remote-message="Email is already registerd in the system" 
          required="required" /> 
         <span class="help-block"> 
          Email must be unique 
         </span> 
        </div> 
       </div> 


       <div class="form-group"> 
        <label class="control-label col-sm-3" for="password"> 
         Password: 
        </label> 
        <div class="col-sm-9"> 
         <input type="password" id="password" name="password" class="form-control mb-sm" data-ng-model="user.password" 
          data-parsley-trigger="change" 
          data-parsley-minlength="6" 
          required="required" /> 
         <input type="password" id="password-r" name="password-r" class="form-control" placeholder="Confrim Password" data-ng-model="user.confirmPassword" 
          data-parsley-trigger="change" 
          data-parsley-minlength="6" 
          data-parsley-equalto="#password" 
          required="required" /> 
        </div> 
       </div> 
      </fieldset> 
      <div class="form-actions"> 
       <button type="submit" data-ng-click="AddNewUser($event)" class="btn btn-danger btn-rounded pull-right">Validate &amp; Submit</button> 
       <button type="button" class="btn btn-default btn-rounded">Cancel</button> 
      </div> 
     </form> 

и это мой асинхронной валидатор:

window.ParsleyExtend = { 
    asyncValidators: { 
     checkusername: { 
      fn: function (xhr) { 
       console.log($('[name="userName"]')); 
       return 404 === xhr.status; 

      }, 
      url: authService.serviceBase + 'api/account/CheckUserName/' //+ $('[name="userName"]').text() 


      }, 
     checkemail: { 
      fn: function (xhr) { 

       console.log($('[name="email"]')); 

       return 404 === xhr.status; 
      }, 
      url: authService.serviceBase + 'api/account/CheckEmail/'// + $('[name="email"]').text() 
     } 
    } 
}; 

и это, как я проверить форму:

$scope.AddNewUser = function ($event) { 

    $event.preventDefault(); 
    //THis resturns true allways when the remote validation is not valid,, but when other non remote valdiation happens is works fine 
    $('#AddUserForm').parsley().validate(); 
    //and this if statement resturns true allways even when the remote validation is not valid,, but when other non remote valdiation happens is works fine 
    if ($('#AddUserForm').parsley().isValid()) { 
     authService.saveRegistration($scope.user).then(function (response) { 

      $scope.savedSuccessfully = true; 

      // $scope.message = "User has been registered successfully, you will be redicted to login page in 2 seconds."; 
      //startTimer(); 

     }, 
     function (response) { 
      var errors = []; 
      for (var key in response.data.modelState) { 
       for (var i = 0; i < response.data.modelState[key].length; i++) { 
        errors.push(response.data.modelState[key][i]); 
       } 
      } 
      $scope.message = "Failed to register user due to:" + errors.join(' '); 
     }); 
    } 
}; 

ответ

1

просто найти ответ .. Я должен использовать asyncIsValid() и asyncValidate() вместе с обычными методами isValid() и Validate(), поэтому код будет таким же, как и следует:

$('#AddUserForm').parsley().asyncValidate(); 

if($('#AddUserForm').parsley().isValid() && $('#AddUserForm').parsley().isAsyncValid()) { 

....} 
+0

«ТипError: form.parsley (...). isAsyncValid не является функцией [Узнать больше]" – bart