Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Пропадает форма после ajaxSucces (https://javascript.ru/forum/jquery/69874-propadaet-forma-posle-ajaxsucces.html)

wfjs 25.07.2017 08:06

Пропадает форма после ajaxSucces
 
Добрый день товарищи программисты! Помогите разобраться с проблемой. Есть форма обратной связи, используется модальное окно fancybox, она через jquery ajax() отправляет данные на файл со скриптом. Все хорошо, данные отправляются, приходит ответ и выполняется то, что указано в свойстве jQuery.ajax succes. Но при этом также сама форма стает display: none. Как можно это предотвратить? Нужно сначала обработать ответ вывести сообщение, а потом пользователь исправляет данные, нажимает отправить и если все хорошо, форма стает display: none. Подскажите как то можно предотвратить скрытие формы несмотря на то, что пришел succes, но результат succes не тот, что нужен, а форма скрывается?

Блок с формой
<div id="feedback">
    <h2 class="feedback_header">Заказать <br/>обратный звонок</h2>
    <form id="f_contact" name="contact" action="#" method="post">
        <label for="f_name">Ваше имя:</label><br>
        <input type="text" id="f_name" class="f_input" name="f_name"><br>
        <label for="f_phone">Ваш телефон:</label><br>
        <input type="text" id="f_phone" class="f_input" name="f_phone"><br>
        <button id="f_send">Заказать звонок</button>
    </form>
<p style="text-align: center;"><strong class="f_msg"></strong></p>
</div>


Код jquery ajax
$(document).ready(function(){
    $(".modalbox").fancybox();
    $("#f_contact").submit(function(){ return false; });
    $("#f_send").on("click", function(){
if($("#f_name").val()!='empty' && $("#f_phone").val()!='empty')
        {
            jQuery.ajax({   
                url: "/ajax/form.php",
                type: "POST", 
                dataType: "json",
                data: "f_name="+$("#f_name").val()+"&f_phone="+$("#f_phone").val(),
                success: function(response) {
                    setTimeout("$(\".f_msg\").text(\"Запрос отправлен!\")", 600);
                    $("#f_contact").fadeOut("fast", function(){
                        setTimeout("$.fancybox.close()", 2500);
                    });
                    
                },
                error: function(req, text, error) { 
                    console.log(req);
                    console.log(text);
                    console.log(error);
                    $(".f_msg").text("Запрос не отправлен!");
                }
            });    
            
        } else {
            $(".f_msg").text("Заполните все поля!");    
        }
});
});

laimas 25.07.2017 08:11

Цитата:

Сообщение от wfjs
setTimeout("$(\".f_msg\").text(\"Запрос отправлен!\")", 600);

Это зачем?

Цитата:

Сообщение от wfjs
$("#f_contact").fadeOut("fast", function(){

Это и скрывает форму.

wfjs 25.07.2017 08:20

показалось, что форма скрывается раньше, чем появляется текст и я подумал, что это происходит где-то в другом месте))) . Большое спасибо!

Цитата:

Сообщение от laimas (Сообщение 459481)
Это зачем?

сделал чтобы текст появлялся с задержкой

laimas 25.07.2017 08:20

Цитата:

Сообщение от wfjs
сделал чтобы текст появлялся с задержкой

Зачем?

wfjs 25.07.2017 08:42

Так более красиво выглядело, когда форма исчезает, появляется текст, в общем визуально показалось, что так выглядит лучше

laimas 25.07.2017 08:48

Цитата:

Сообщение от wfjs
Так более красиво выглядело, когда форма исчезает, появляется текст

Для этого показывать текст нужно после окончания fadeOut:

$("#f_contact").fadeOut("fast", function(){
     $.fancybox.close();
     //и показать сообщение
});


к чему куча таймеров? Не знаю что в этом красивого, но "посмотреть мультик" и только потом узнать, что запрос завершился удачно, это уже мазохизм. :)

wfjs 25.07.2017 08:58

это все из-за неопытности, костыли, грабли, мультики, ты прав laimas таймер здесь лишний, спасибо за помощь!


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