Javascript JQuery验证规则不起作用

Javascript JQuery验证规则不起作用,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,已修复-请参见下文:) 我正在使用jQuery验证插件,由于某些原因,我无法让它返回有效字段-始终返回无效字段 这是我的 $(function(){ $("#address").validate({ valid: function(val){ $.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=

已修复-请参见下文:)

我正在使用jQuery验证插件,由于某些原因,我无法让它返回有效字段-始终返回无效字段

这是我的

        $(function(){
            $("#address").validate({
                valid: function(val){
                    $.getJSON("http://maps.google.com/maps/geo?q="+ escape(val) +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
                    function(data, textStatus)
                    {
                        if(data.Status.code=='200')
                        {
                            return true;
                        }else{
                            return false;
                        }
                    });

                },
                errorMessage: function(val){
                    return "must geo code";
                },
                appendCompletionIcon: true
            });
        });
我可以看到任何特定地址的地理代码请求返回为“已找到”或“未找到”,但验证仍然失败-如果我按照以下方式修改函数,我确实会收到与有效或无效地址相关的“是”或“否”警报,但验证仍然失败

                    function(data, textStatus)
                    {
                        if(data.Status.code=='200')
                        {
                            alert('yes');
                            return true;
                        }else{
                            alert('no');
                            return false;
                        }
                    });
任何帮助都将不胜感激


我找到了一种方法来破解这个问题,它不是非常漂亮,因为它需要两个地理代码调用才能完成。不过对我来说已经足够好了

var geocode = false;
function geoadd()
{
    $.getJSON("http://maps.google.com/maps/geo?q="+ $("#address").val() +"&key=ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA&sensor=false&output=json&callback=?",
    function(data, textStatus)
    {
        if(data.Status.code=='200')
        {
            geocode = true;
        }else{
            geocode = false;
        }
    });
}

        $(function(){
            $("#address").validate({
                valid: function(val){
                    geoadd();
                    return geocode;
                },
                errorMessage: function(val){
                    return "must not be blank";
                },
                appendCompletionIcon: true
            });
        });

无论ajax调用状态如何,验证都会失败,因为从
valid
处理程序返回的值为null,而不是true或false

true或false值由ajax的完整处理程序返回,这与从
valid
函数返回true/false值不同


要解决此问题,您必须进行同步ajax调用(我不建议这样做,因为它会在等待响应时锁定用户界面),或者将验证插件更改为其他支持使用ajax调用进行验证的插件。

谢谢,您认为我可以破解它吗,因为我有50多个字段。根据地理代码结果,可以使用函数设置值为1或0的隐藏表单字段,并根据该值进行验证?或者我还是在浪费时间。谢谢你,那会有用的。触发ajax调用以进行地理代码检查,然后在ajax响应处理程序中执行所需操作(根据响应将#地址字段标记为有效或无效)。