Php .post在jQuery.validator.addMethod中始终返回false

Php .post在jQuery.validator.addMethod中始终返回false,php,jquery,jquery-plugins,Php,Jquery,Jquery Plugins,我对jQuery和javascript编程非常陌生。我在下面有一个程序检查用户名是否被使用。目前,PHP脚本总是返回 if(isset($_POST["username"]) )//&& isset($_POST["checking"])) { $xml="<register><message>Available</message></register>"; echo $xml;

我对jQuery和javascript编程非常陌生。我在下面有一个程序检查用户名是否被使用。目前,PHP脚本总是返回

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

}))

您需要使用其扩展形式,以便可以将
async
选项设置为false,如下所示:

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
函数在验证完成后发生,因为这是一个异步操作。因此,当前,在使用返回值时,它没有返回任何内容,并且
未定义
~=
错误
,这就是它总是显示为错误的原因。通过将
async
设置为
false
,可以让代码在没有回调的情况下按顺序执行,因此实际使用了上面示例中的返回


另一种选择是,如果您可以调整页面的返回结构,则可以使用验证插件的内置功能,该功能仅适用于此类情况:)

没问题,现在就可以使用了。代码如下:

$(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;
});
});

好的,这可能不是所有相关的,但我有一个类似的问题。我没有对返回值做任何处理,我只是返回了它。这一直都是真的。因此,经过一番探索之后,我发现来自服务器的值在验证器中显示为字符串。只要不是空字符串,它就会返回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");

抱歉:(它不工作,返回false。我已将成功回调函数更改为:if($(“message”,xml)。text()=“Available”)return true;else return false;@abdullah-这个
return
函数没有区别,只是额外的代码…如果你发布的答案有效,但这个答案无效,那么你问题中的php文件不准确,你应该更新它。@Nick:我想问题是在参数之后返回了伪函数“checkAvailability”,即函数(值,元素){}。实际上,它没有返回任何值~=false,对吗?它只是执行了一些ajax函数,返回了一些值。但是“函数(值,元素)”本身没有返回任何值。我是一个初学者,只是我的想法:)@abdullah-这就是发生的事情,它没有返回,因此结果是
未定义的
,正如我在上面的回答中所说的,任何不
为真的
都会失败验证。如果它解决了您的问题,也请确保接受答案!@Nick Craver不使用async:false。不可能解决此返回问题吗?如果有,我会有任何选项请告诉我…如果它返回true,它将返回boolean true,如果它返回false,eval将返回boolean false,对吗?
jQuery.validator.addMethod("checkAvailability",function(value,element){
 return eval($.ajax({
    url: "/check",
    async: false,
    data: {
      field: $('#element').attr('name'),
      val: value
    }
 }).responseText);
}, "error");