Я пытаюсь проверить удаленно, существует ли строка на сервере, используя 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? Есть ли способ обхода? Должен ли я искать взломать плагин, чтобы он работал?
Ответить 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
и других параметров не требуются.