2016-10-13 3 views
0

html 페이지의 서버 측에서 사용자 정의 오류 메시지를 catch하고 표시하는 방법은 무엇입니까?JQuery 유효성 플러그인 - 서버에서 사용자 정의 동적 메시지 설정

function getAlertMessage() { 
    $.ajax({ 
     type : "POST", 
     url : "getAlert.do", 
     success : function(data) { 
      data.alertmsg //How to set this msg to validatename property in messages Attribute 
     }, 
     error : function() { 
      alert("No Court No details found"); 
     } 
    }); 
} 

$(document).ready(function() { 
    $("#register-form").validate({ 
     rules : { 
     username : { 
      required : true, 
      validname : true, 
      minlength : 4 
     } 
     }, 
     messages : { 
     username : { 
     required : "Please Enter UserName", 
     validname : getAlertMessage(), //it does not worked here 
     minlength : "UserName is Too Short"}}, 
     errorPlacement : function(error,element) { 
      $(element).closest('.form-group').find('.help-block').html(
error.html()); 
}, 
     highlight : function(element) { 
     $(element).closest('.form-group') 
     .removeClass('has-success') 
     .addClass('has-error'); 
      }, 
     unhighlight : function(element, 
     errorClass, validClass) { 
     $(element).closest('.form-group') 
     .removeClass('has-error') 
     .addClass('has-success'); 
     $(element).closest('.form-group') 
     .find('.help-block').html('');}, 
      submitHandler : function(form) { 
      form.submit();}});}); 
+0

당신이 중 하나를 호출'validate' 성공 핸들러 내부에, 당신 또는'$를 ("# 레지스터 형식을")에 액세스하여 성공 처리기에서 설정이 유효 것을 변경합니다. 아래 오류 메시지가 표시됩니다 .settings' – adeneo

+0

Jsfiddle에 제발 보여 주시겠습니까? –

답변

1

왜 당신은 remote 방법이 이미 존재하는 경우이을해야 할 것인가?

username 필드의 유효성을 검사하는 서버 호출과 같아 보이므로이 용도로 설계된 방법을 사용하십시오. 서버에서 true, false 또는 동적 사용자 정의 유효성 검사 메시지를 나타내는 JSON 인코딩 문자열을 보내십시오.

remote에 의해 유효성이 검사되는 입력란 값은 이미 기본적으로 전송되므로 urltype 매개 변수 만 정의하면됩니다. 당신이 rulesmessages 내에서 정의해야 할 것 전부

$(document).ready(function() { 
    $("#register-form").validate({ 
     rules: { 
      username: { 
       required: true, 
       minlength: 4, 
       remote: { 
        url: 'getAlert.do', 
        type: 'POST' 
       } 
      } 
     }, 
     messages: { 
      username: { 
       required: "Please Enter UserName", 
       minlength: "UserName is Too Short" 
       // DO NOT NEED 'remote' message since it's already coming from server 
      } 
     }, ..... 

. username 값은 서버의 getAlert.do 기능으로 전송됩니다.

그런 다음 서버에서 getAlert.do은 유효성 검사를 통과하려면 true을 다시 보내야하고 유효성 검사가 실패 할 때 오류 메시지를 나타내는 JSON 인코딩 문자열이 필요합니다.

은 참조 : 나는 문제가 이런 종류의 작업을 봤는데 결국 작동있어 jqueryvalidation.org/remote-method/

+0

getAlert.do는 json 객체의 배열을 반환합니다.조건과 해당 메시지를 어떻게 확인합니까? –

0

. 온라인과 비슷한 것은 없으며 질문에 직접적으로 관련되어 있기 때문에 좋은 장소라고 생각합니다.

그래서 필요한 것은 검사를 수행하고 데이터베이스 검사 (CSM과 비슷 함)를 기반으로 반환 할 오류 메시지를 결정하는 서버 측 함수입니다. 이 메시지는 사용자에게 표시되고 그에 따라 필드의 유효성을 검사해야합니다.

그것은 가장 좋고/깨끗한 방법이 아닐지도 모르지만 작동하고 나쁘다고 생각하지 않습니다! 기본적으로 오류 메시지를 저장하려면 페이지에 숨겨진 필드가 있어야합니다. 그래서 내가 일하는 방법은 다음과 같습니다 :

jQuery.validator.unobtrusive.adapters.add("customValidation", [], function (options) { 
    options.rules["remote"] = { 
     url: "/api/CustomValidation", 
     type: "post", 
     data: { 
      fieldValue: function() { return options.element.value; } 
     }, 
     beforeSend : function() { 
      // Show loading gif 
      $('#loader').show(); 
     }, 
     dataFilter: function (data) { 
      // if the API returns a JSON string then this is needed 
      var result = JSON.parse(data); 

      if (result != undefined && result != null) { 
       if (result.ErrorMessage != null) { 
        // update a hidden field on the page with the message. 
        $('#HdnValidationMessage').val(result.ErrorMessage); 

        // Field is not valid so return false 
        return false; 
       } 
       else { 
        // no error message returned so field must be valid 
        return true; 
       } 
      } 
      else { 
       // Something has gone wrong! I won't let this stop the user. 
       return true; 
      } 
     }, 
     complete: function() { 
      // hide loading gif 
      $('#loader').hide(); 
     } 
    }; 

    // Default error message set to fetch the error fromt he hidden field. 
    options.messages["remote"] = function() { return $('#HdnValidationMessage').val(); } 
}); 

나는 이처럼 오래 동안 붙어있는 누군가를 돕기를 희망합니다!

UPDATE :

이 숨겨진 필드없이이 작업을 얻었다. 내가 전에 할 수 없었던 이유를 모르지만 지금은 훨씬 더 솔직하다.

이제 컨트롤러 동작 서버 쪽에서 유효하면 true를 반환하고 올바르지 않으면 오류 메시지를 반환합니다.) (

jQuery.validator.unobtrusive.adapters.add("customValidation", [], function (options) { 
    options.rules["remote"] = { 
     url: "/api/CustomValidation", 
     type: "post", 
     data: { 
      fieldValue: function() { return options.element.value; } 
     }, 
     beforeSend : function() { 
      // Show loading gif 
      $('#loader').show(); 
      $(options.element).prop("readonly", "readonly"); 
     }, 
     complete: function() { 
      // hide loading gif 
      $('#loader').hide(); 
      $(options.element).removeProp("readonly"); 
     } 
    }; 
}); 
관련 문제