Механизм проверки jQuery пользовательская проверка JavaScript

Я пытаюсь проверить доступность поддомена с помощью jQuery Validate Engine через пользовательскую функцию. Проверка выполняется правильно, но alertText не отображается, если запрос .ajax возвращает 200. Я добавил заголовки Access-Control-Allow-Origin и вижу успешное завершение запроса в своих журналах.

Что я делаю неправильно?

Функция Javascript:

function validateDomain(field, rules, i, options) {
    var url = "https://" + field.val() + ".example.com/";
    $.ajax(url,
        {
            statusCode: {
                200: function() {
                    //alert('name exists already');
                    return options.allrules.validate2fields.alertText;
                }
            }
        });
}

Поле формы:

    <label class="required" for="signup[subdomain]">Subdomain<span>*</span></label>
    <span>https://</span>
    <input id="signup[subdomain]" name="signup[subdomain]" class="field field validate[required,funcCall[validateDomain]]" type="text">
   <span>.example.com</span>

person mrbnetworks    schedule 14.03.2013    source источник
comment
можете ли вы добавить обработчик ошибок и посмотреть, выполняется ли он, я сомневаюсь, что происходит ошибка синтаксического анализа   -  person Arun P Johny    schedule 14.03.2013
comment
выглядит как дубликат Как вернуться ответ на вызов AJAX из функции?   -  person Bergi    schedule 14.03.2013
comment
Вы пометили это как jquery-validate, так и jquery-validation-engine и все же это два совершенно разных плагина. Какой из них вы действительно используете?   -  person Sparky    schedule 14.03.2013
comment
Sparky отредактировал правильный плагин. Я использую jquery-validate-engine. @Bergi Это то, что мне было нужно. Добавление обратного вызова для запроса работает.   -  person mrbnetworks    schedule 14.03.2013


Ответы (1)


Проблема в том, что $.ajax является асинхронной функцией и так не работает.

function validateDomain(field, rules, i, options) {
    var url = "https://" + field.val() + ".example.com/";
    $.ajax(url,
        {
            statusCode: {
                200: function() { // [ second function ]
                    return options.allrules.validate2fields.alertText;
                }
            }
        });
}

Проблема в том, что ваш возврат предназначен только для [second function], а не для validateDomain.

Просматривая документы jquery-validation-engine, я не вижу способа делать то, что вы хотите.

person danilopopeye    schedule 09.04.2013