Правило проверки JQuery не работает - PullRequest
0 голосов
/ 12 сентября 2011

Исправлено - см. Ниже:)

Я использую плагин проверки jQuery и по какой-то причине не могу заставить его вернуть действительное поле - всегда возвращает недействительное.

http://plugins.jquery.com/project/jqueryvalidate

Вот что у меня есть

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

Я вижу, что запросы кода GEO возвращаются как найденные или не найденные для какого-либо конкретного адреса, но проверка все еще не проходит - если я изменяю функцию следующим образом, я получаю предупреждение да или предупреждение нет в отношении действительного или недействительного адрес, но проверка по-прежнему не удается.

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

1 Ответ

1 голос
/ 12 сентября 2011

Ваша проверка не пройдена независимо от состояния вызова ajax, потому что значение, возвращаемое из вашего обработчика valid, равно null, не true или false.

Истинные или ложные значения возвращаются полным обработчиком ajax, который не совпадает с возвратом истинного / ложного значения из вашей функции valid.

Чтобы решить эту проблему, вам нужно было бы либо сделать синхронный вызов ajax (я бы не рекомендовал его, поскольку он блокирует пользовательский интерфейс во время ожидания ответа), либо заменить подключаемый модуль проверки на другой, поддерживающий проверку с использованием ajax. вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...