Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   помогите с капчей, пожалуйста... (https://javascript.ru/forum/jquery/13095-pomogite-s-kapchejj-pozhalujjsta.html)

InviS 15.11.2010 09:41

помогите с капчей, пожалуйста...
 
Ребят, не могу сделать проверку капчи.. точнее я ее делаю, а форму отправить не могу.. вот код:
$(".data").submit(function(e){
        var result = false;
        $.post("ajax.php",{q : "captch"},function(data){
            var captch = $("#captch").val();
            
            if (captch != data){
                alert("Капча введена неверно!");
            } else {         // отправка формы
                return true;
            }
        });
        return result;   
    });


В любом случае форма не отправляется из-за асинхронности .post запроса... Если внутри post писать return - не работает, а если снаружи - отработает быстрее, чем придет ответ... Что делать?

Gvozd 15.11.2010 09:48

послать синхронный запрос вам следует.

subzey 15.11.2010 10:06

А я бы посоветовал проверять капчу сразу на сервере.

А то это странный какой-то Тьюринг-тест, клиенту приходит правильный ответ.

— Пароль?
— Эээ, qwerty
— Нет, пароль не qwerty, а 12345! Пароль?
12345!
— Проходи!

micscr 15.11.2010 10:06

var isChecked = false;
$(".data").submit(function(e){
        if (isChecked ) return true;
        $.post("ajax.php",{q : "captch"},function(data){
            var captch = $("#captch").val();
             
            if (captch != data){
                alert("Капча введена неверно!");
            } else {    
               isChecked = true;    
               $(".data").submit();                
            }
        });
        return false;  
    });

Плюс проверяй равенство капчи на сервере, а возвращай результат сравнения.

InviS 15.11.2010 11:08

micscr,
что-то мне кажется, что форма сработает по второму клику.. запрос ведь асинхронный...
Gvozd,
Это делается только через .ajax?

micscr 15.11.2010 11:50

Цитата:

Сообщение от InviS (Сообщение 79331)
micscr,
что-то мне кажется, что форма сработает по второму клику.. запрос ведь асинхронный...

чего бы ей сработать? Флаг разрешительный выставится только если ответ пришел верный.
А вот то что надо не дать кликать пока предыдущий клик обрабатывается - это да, чтобы не множились проверки. Тут по разному можно или флагом, что обработка или кнопку сабмита скрыть.

InviS 15.11.2010 11:54

ну isChecked изменяется только в самом обработчике... т.е. он станет true после того, как мы нажмем... т.к. проверка этого условия стоит вначале, то ничего не произойдет в первый раз.. Ну мне так кажется

micscr 15.11.2010 11:57

Цитата:

Сообщение от InviS (Сообщение 79340)
Ну мне так кажется

креститься надо если кажется. ;)

Цитата:

Сообщение от InviS (Сообщение 79340)
т.е. он станет true после того, как мы нажмем

да ну? :)

Gvozd 15.11.2010 14:59

Цитата:

Сообщение от InviS
Это делается только через .ajax?

например, да.
а вообще-то любой jQuery метод реализующий AJAX_фичи, можно настроить глобально


Часовой пояс GMT +3, время: 04:36.