具有远程验证的jQuery不等待来自服务器的回答

时间:2011-05-03 09:13:08

标签: javascript jquery jquery-plugins jquery-validate

我注意到,有时我的验证码有误:

var $validator = $("#checkoutForm").validate();

...

if (!$validator.element($sameShippingAddress)) {
     ...       
}

使用Firebug进行调试显示,有时$ validator.element($ sameShippingAddress)将返回undefined(我猜它只是不等到响应被返回)并且假定为false,即使元素有效。

如果在if语句之前添加这样的代码,一切正常:

 while (validator.element($sameShippingAddress) !== undefined) {

 }

问题是,如果这是正确的解决方案,并没有更好的方法来处理验证插件本身的问题?

更新:我正在使用http://bassistance.de/jquery-plugins/jquery-plugin-validation/

3 个答案:

答案 0 :(得分:1)

无限循环验证器变量不是一个好选择。而是使用下面的代码利用Javascript计时器。您可以在validate()方法之后显示动画处理/服务器响应图形。

var validator = $('#resetpassword').validate({///your code...})

    doTimer();

    function timedCount()
    {
        t=setTimeout("timedCount()",1000);
    }

    function doTimer()
    {
    if (validator === undefined)
      {
        timedCount();
      }
    }

if(validator==true)
    $('#form').ajaxSubmit(options);

答案 1 :(得分:1)

很难说你是如​​何处理成功提交的,或者你是否使用css类来表示必填字段,但以下是如何在插件的demo中完成:

$.validator.setDefaults({
    // code to be executed on submit
submitHandler: function() { alert("submitted, replace this with your server request");}
});

$().ready(function() {
    // validate the comment form when it is submitted
        // use css class .required for fields you want the validator to check
        // if your form is valid then it is handled by the submitHandler
        // if not the plugin displays error messages
    $("#checkoutForm").validate();
    //validate can take a block for custom validation and error messages
});

希望这可以帮助你找到一个解决方案,而不仅仅是更多相同(也只是意识到这个问题是一年之久,但我已经写了这个......)

答案 2 :(得分:0)

很明显,这不是最好的解决方案。而是添加

if(!$ validator.element($ sameShippingAddress)){      ...
}

在Ajax回调函数中。