2016-10-26 6 views
0

это связано с JQuery-проверкиПроверка уникального имени пользователя с JQuery Validate

Я пытаюсь улучшить JQuery Validate на моем сайте, добавив вариант, который я называю «уникальный», который проверяет, является ли выбранное имя пользователя уже используемый другим пользователем или нет. Для этого я проверяю AJAX на моей БД, если имя пользователя уникально или нет (это работает), однако this.optional (element) не работает ... Я думаю, это потому, что «это» не относится к «уникальному «больше когда на функции, но я не вижу пути вокруг нее .... Я потратил на это 3 часа, глядя в Интернете, но не могу найти, что происходит ...

unique: function(value, element) 
{ 
    $.post('includes/userunique.php',{uname:value}, 
    function(response,status) 
    { 
     return this.optional(element) || response > 0; 
    }); 
} 
+0

Зачем изобретать колесо? IMO @Barmar, OP должен использовать 'remote', чтобы проверить, было ли имя принято, и это будет дубликат этого: http://stackoverflow.com/q/16577120/594235 – Sparky

+0

@Sparky Не читал тщательно, поэтому я не заметил, что это было связано с jquery-validate, просто увидели проблему асинхронности. – Barmar

+0

@Sparky Я снова открылся, теперь вы можете приблизиться к этому обману. – Barmar

ответ

0

Метод post is async, вы не сможете получить результат такого вызова ajax. Async означает, что выполнение кода не ждет завершения вызова ajax.

Метод post возвращает обещание с методами обратного вызова для done, fail и always, где вы можете оценить результат или реагировать на ошибки.

Для получения дополнительной информации проверки post официальной документации

+0

Спасибо, я понимаю, однако, есть ли способ немного изменить его и интегрировать изменение элемента непосредственно внутри функции: unique: function (value, element) { free = $ .post ('includes/userunique.php ', {uname: value}, function (response, status) {return this.optional (element) || response> 0;}); } Это не работает, к сожалению, поскольку я думаю, что «это» не определено, когда функция, но я уверен, что есть что-то делать? – Iron

+0

@ Iron: Я уезжаю сейчас, но я попытаюсь взглянуть позже, добавьте свой комментарий в качестве редактирования в вопросе, поскольку его трудно прочитать без формата. –

+0

большое спасибо! Сделаю – Iron

-1

Синтаксис вам нужно использовать как отмечает Клаудио будет.

unique: function(value, element) { 
    $.post('includes/userunique.php', { 
     uname: value 
    }) 
    .done(function(response) { 
     // Do stuff with the response 
    }) 
    .fail(function() { 
     // Handle the error 
    }) 
    .always(function() { 
     // Do something regardless of whether successful or failure 
    }) 
} 
Смежные вопросы