【问题标题】:.post inside jQuery.validator.addMethod always returns falsejQuery.validator.addMethod 中的 .post 总是返回 false
【发布时间】:2010-06-05 23:53:09
【问题描述】:

我对 jQuery 和 javascript 编程非常陌生。我下面有一个程序可以检查用户名是否被使用。目前,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;
});

});

【问题讨论】:

    标签: php jquery jquery-plugins


    【解决方案1】:

    没关系,现在可以工作了。代码如下:

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

    【讨论】:

      【解决方案2】:

      您需要使用$.post() 的扩展形式,即$.ajax(),因此您可以将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 函数会在验证完成后发生,因为它是一个异步操作。所以目前,在使用返回值时它没有返回任何东西,并且undefined ~= false,这就是它总是显示为假的原因。通过将async 设置为false,您可以让代码在没有回调的情况下按顺序执行,因此实际上使用了上例中的返回。

      如果您可以调整页面的返回结构,另一种选择是使用验证插件的内置remote option,这就是这种事情:)

      【讨论】:

      • sorry :( 它不起作用,返回 false。我已将成功回调函数更改为: if ( $("message", xml).text() == "Available" ) return真;否则返回假;
      • @abdullah - return 函数没有区别,只是额外的代码......如果您发布的答案有效,但这个没有,那么您问题中的 php 文件不准确你应该更新它。
      • @Nick:我认为问题是在“checkAvailability”之后的参数中返回了虚拟函数,即 function(value,element){} 。实际上,它什么也没返回~=false,对吧?它只是做了一些返回一些值的ajax函数。但是“函数(值,元素)”本身并没有返回任何东西。我是初学者,只是我的想法:)
      • @abdullah - 这就是发生的事情,它没有返回,所以结果是undefined,正如我在上面的答案中所说,任何不是true 的东西都无法通过验证。如果它解决了您的问题,请确保接受答案!
      • @Nick Craver 不使用异步:false。不能解决这个退货问题吗? .如果有任何选择,请告诉我...
      【解决方案3】:

      好的,这可能不是那么相关,但我遇到了类似的问题。我没有对返回值做任何事情,我只是返回了它。它总是正确的。因此,经过一番摸索后,我发现来自服务器的值显示为验证器的字符串。只要它不是空字符串,它就会返回 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");
      

      【讨论】:

      • 所以如果它返回true,它eval将返回boolean true,如果它返回false,eval将返回boolean false。对吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-11-05
      • 2018-11-05
      • 2019-05-06
      • 2017-04-29
      • 2013-04-30
      相关资源
      最近更新 更多