Проверка JQuery Uncaught typeError при применении пользовательского сообщения для удаленной проверки

0

Я пытаюсь проверить удаленно, существует ли строка на сервере, используя jqueryvalidation.org plugin.

Вот мой код jQuery:

$("#title").rules("add", {
    "remote": {
        url: checkTitleAvailable.php,    // echoes "true" or "false"
        type: "post",
        data: {
            proposedSeoTitle:function() {
                return $('#title').val();
            }
        },
        complete: function(response) {
            if (response.responseText != "true" && response.responseText != "false") {
                alert("unexpected response " + response.responseText);
            }
            return response;
        }
    },
    "messages": {"remote": "That title already exists"}
});

('title' - поле ввода с id = "title" class= "required")

Я получаю сообщение об ошибке:

"Uncaught TypeError: Невозможно вызвать метод" вызов "неопределенного".

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

Я что-то делаю неправильно, или это ошибка в плагине Validation? Есть ли способ обхода? Должен ли я искать взломать плагин, чтобы он работал?

  • 1
    Также прочитайте мой ответ здесь: stackoverflow.com/questions/19855214/…
  • 0
    Привет, Спарки, твой другой ответ, конечно, дал мне еще несколько поводов для преследования, но мне так и не удалось заставить его работать. Я все еще думаю, что есть ошибка в плагине, но я надеюсь, что я не прав. Кажется действительно опрятным, что вызов на стороне сервера может отозвать что-то обратно, что заканчивается как пользовательское сообщение. С нетерпением жду вашего ответа, а пока я получу его, я опубликую свой ответ. Я также должен упомянуть, что у меня есть дополнительные данные, которые мне нужно передать (поэтому просто по умолчанию значение val не подходит для меня). Я оставил это для ясности.
Показать ещё 4 комментария
Теги:
jquery-validate

1 ответ

1
Лучший ответ

Ответить OP:

'title' - поле ввода с id="title" class="required"

Несмотря на то, что вы используете метод .rules('add') для объявления своих правил в этом поле, плагин по-прежнему требует, чтобы каждое поле ввода имело (уникальный) атрибут name. Это то, как плагин отслеживает входные данные.

Смотрите рекомендации в разделе Разметка страницы Ссылки Docs...

Атрибут name является обязательным для входных элементов, плагин проверки не работает без него.


Ваш код:

"remote": {
    url: checkTitleAvailable.php,    // echoes "true" or "false"
    type: "post",
    data: {
        proposedSeoTitle:function() {
            return $('#title').val();
        }
    },
    complete: function(response) {
        if (response.responseText != "true" && response.responseText != "false") {
            alert("unexpected response " + response.responseText);
        }
        return response;
    }
}

Я не совсем уверен, что вы пытаетесь сделать с complete обратным вызовом здесь. remote управления плагином автоматически оценивает ответ с сервера, но вы также оцениваете, является ли ответ логическим и возвращает ответ.

В соответствии с документацией remote метод ищет true для проверяемого поля. Или, когда ответ сервера является false, undefined, null или строковым, он оценивается как недопустимое поле, где сама строка переполняет сообщение об ошибке по умолчанию. Учитывая, что плагин уже оценивает ответ сервера, вам никогда не придется вручную оценивать ответ, используя complete обратный вызов. В противном случае вы можете написать свой собственный remote метод с нуля, вместо того, чтобы использовать его из плагина.

Ресурс serveride вызывается через jQuery.ajax(XMLHttpRequest) и получает пару ключ/значение, соответствующую имени проверяемого элемента, и его значение в качестве параметра GET. Ответ оценивается как JSON и должен быть true для действительных элементов и может быть любым false, undefined или null для недопустимых элементов, используя сообщение по умолчанию; или строки, например. "Это имя уже принято, попробуйте peter123 вместо", чтобы отобразить его как сообщение об ошибке.

Удалите complete обратный вызов и посмотрите, что произойдет.

remote: { // <-- quotation marks not required.
    url: checkTitleAvailable.php,    // echoes "true" or "false"
    type: "post",
    data: {
        proposedSeoTitle:function() {
            return $('#title').val();
        }
    }
},
messages: { // <-- quotation marks not required.
    // quotation marks not required around 'remote'.
    remote: "That title already exists"
}

BTW - кавычки вокруг rules, messages и других параметров не требуются.

  • 0
    Спасибо за ваш ответ, я ценю это. К сожалению, я все еще получаю ошибки. Это может занять пару дней, прежде чем я успею снова провести расследование. Я задам другой вопрос, если мне нужно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню