[Php] .post jQuery.validator.addMethod는 항상 false를 반환합니다.


Answers

async 옵션을 false로 설정할 수 있도록 $.ajax()$.post() 확장 형식을 사용해야합니다.

jQuery.validator.addMethod("checkAvailability",function(value,element){
    $.ajax({
      url: "login.php",
      type: 'POST',
      async: false,
      data: {username:"test", checking:"yes"},
      success: function(xml) {
        return $("message", xml).text() == "Available";
      }
    });
},"Sorry, this user name is not available");

현재 응답을 분석하는 success 함수는 비동기 작업이기 때문에 유효성 검사가 완료된 후에 발생합니다. 그래서 현재는 반환 값이 사용될 때 아무것도 반환하지 않고 undefined ~ = false 반환하므로 항상 false로 표시됩니다. asyncfalse 로 설정하면 코드가 콜백없이 순서대로 실행되므로 위 예의 리턴 값이 실제로 사용됩니다.

또 다른 대안은 페이지의 반환 구조를 조정할 수 있다면 유효 플러그 인의 기본 제공 remote 옵션 을 사용하는 것입니다.이 옵션 은 바로 이런 종류의 것입니다. :)

Question

저는 jQuery와 자바 스크립트 프로그래밍에 새로운 것이되었습니다. 아래에 사용자 이름을 가져 왔는지 아닌지 확인하는 프로그램이 있습니다. 현재 PHP 스크립트는 항상 반환합니다.

  if(isset($_POST["username"]) )//&& isset($_POST["checking"]))
    {
        $xml="<register><message>Available</message></register>";
        echo $xml;
    }

로그인 기능은 작동하지만 사용자 이름 확인은하지 않습니다. 어떤 아이디어? 다음은 모두 내 코드입니다.

$(document).ready(function() {
jQuery.validator.addMethod("checkAvailability",function(value,element){
    $.post( "login.php" , {username:"test", checking:"yes"}, function(xml){
        if($("message", xml).text() == "Available") return true;
        else return false;
    });
},"Sorry, this user name is not available");
$("#loginForm").validate({
    rules:  {
        username: {
            required: true,
            minlength: 4,
            checkAvailability: true
        },
        password:{
            required: true,
            minlength: 5
        }
    },
    messages: {
        username:{
            required: "You need to enter a username." ,
            minlength: jQuery.format("Your username should be at least {0} characters long.")
        }
    },
    highlight: function(element, errorClass) {
                $(element).fadeOut("fast",function() {
                $(element).fadeIn("slow");
                })
    },
    success: function(x){
        x.text("OK!")
    },
    submitHandler: function(form){send()}
});
function send(){
    $("#message").hide("fast");
    $.post( "login.php" , {username:$("#username").val(), password:$("#password").val()}, function(xml){
        $("#message").html( $("message", xml).text() );
        if($("message", xml).text() == "You are successfully logged in.")
        {
            $("#message").css({ "color": "green" });
            $("#message").fadeIn("slow", function(){location.reload(true);});
        }
        else
        {
            $("#message").css({ "color": "red" });
            $("#message").fadeIn("slow");
        }
    });
}
$("#newUser").click(function(){

    return false;
});

});




좋아요,이 모든 것이 관련이있는 것은 아니지만 비슷한 문제가 있습니다. 나는 반환 값으로 아무 것도하지 않았고 방금 반환했습니다. 그리고 그것은 항상 사실입니다. 그래서, 주위에 몇 가지 파고 후 나는 서버에서 값이 유효성 검사기에 문자열로 나타났습니다. 빈 문자열이 아닌 한 true를 반환합니다. 그래서 해결책은 eval ()을 사용하는 것이 었습니다.

예 :

jQuery.validator.addMethod("checkAvailability",function(value,element){
 return eval($.ajax({
    url: "/check",
    async: false,
    data: {
      field: $('#element').attr('name'),
      val: value
    }
 }).responseText);
}, "error");



이제 괜찮습니다. 다음은 코드입니다.

$(document).ready(function() {
jQuery.validator.addMethod("checkAvailability",function(value,element){
 var x= $.ajax({
    url: "login.php",
    type: 'POST',
    async: false,
    data: "username=" + value + "&checking=true",
 }).responseText;
 if($("message", x).text()=="true") return true;
 else return false;
},"Sorry, this user name is not available");
$("#loginForm").validate({
    rules:  {
        username: {
            required: true,
            minlength: 4,
            checkAvailability: true
        },
        password:{
            required: true,
            minlength: 5
        }
    },
    messages: {
        username:{
            required: "You need to enter a username." ,
            minlength: jQuery.format("Your username should be at least {0} characters long.")
        }
    },
    highlight: function(element, errorClass) {
                $(element).fadeOut("fast",function() {
                $(element).fadeIn("slow");
                })
    },
    success: function(x){
        x.text("OK!")
    },
    submitHandler: function(form){send()}
});
function send(){
    $("#message").hide("fast");
    $.post( "login.php" , {username:$("#username").val(), password:$("#password").val()}, function(xml){
        $("#message").html( $("message", xml).text() );
        if($("message", xml).text() == "You are successfully logged in.")
        {
            $("#message").css({ "color": "green" });
            $("#message").fadeIn("slow", function(){location.reload(true);});
        }
        else
        {
            $("#message").css({ "color": "red" });
            $("#message").fadeIn("slow");
        }
    });
}
$("#newUser").click(function(){

    return false;
});
});