AJAX формы отправить уведомление JQuery

У меня есть форма, которую я отправляю через jquery ajax. Я пытаюсь добиться следующего: перед отправкой формы должно быть отправлено уведомление, а после завершения запроса это сообщение должно исчезнуть, и должно быть сообщение "отправлено". Я использую pnotify. Что я пробовал до сих пор:

inProcess = function(){
            m = $.pnotify({
                title: "sending"
            });
            return true;
        }

        event.preventDefault();
        $.ajax('',{
            method: "POST",
            data: myform.serialize,

            beforeSend: inProcess,

            complete: function(response){
                $.pnotify({
                    title: "Sent",
                    type: "success",
                    opacity: "0.8",
                    delay: 5000
                });
                m.remove();
            }
        });

Этот не работает:

  1. По любой причине "отправлено" появляется перед отправкой. Зачем?
  2. Функция remove() удаляет уведомление перед его созданием, но оно не удаляется полностью, можно увидеть, что "отправляющее" уведомление смещено вниз. Как я могу полностью удалить уведомление?
  3. Нужно ли мне оборачивать вызов "send" внутри функции только потому, что beforeSend требует true как код возврата? Или есть более элегантный способ? Особенно мне не нравятся глобальные m переменная

Редактировать:

Согласно некоторым комментариям и Google, я изменил свой код на:

inProcess = function(){
            m = $.pnotify({
                title: "sending"
            });
            return true;
        }

        event.preventDefault();
        $.ajax('',{
            method: "POST",
            data: myform.serialize,

            beforeSend: inProcess,

            complete: setTimeout(function(response){
                $.pnotify({
                    title: "Sent",
                    type: "success",
                    opacity: "0.8",
                    delay: 5000
                });
                $.pnotify_remove_all(),1000)
            }
        });

Что, кажется, работает, но не совсем удовлетворительно из-за вопросов выше

1 ответ

Мне проще следующий путь. может помочь:

inProcess();

$.post(
'file.php',
{
  data: myform.serialize
},
function(response)
{
  success(response);
  $.pnotify({
   title: "Sent",
   type: "success",
   opacity: "0.8",
   delay: 5000
  });
},'json'
)
.always(function() { m.remove(); }
);
Другие вопросы по тегам