У меня есть форма, которую я отправляю через jquery ajax. Я пытаюсь достичь: Перед отправкой формы должно быть отправлено уведомление, и после того, как запрос будет выполнен, это сообщение должно исчезнуть и должно появиться сообщение «отправлено». Я использую pnotify. То, что я пытался до сих пор:ajax form отправить уведомление jquery
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();
}
});
Это один не работает:
- По какой-то причине «послал» появляется перед отправкой. Зачем?
- Функция remove() удаляет уведомление до его создания, но оно не полностью удаляется, видно, что уведомление «отправка» сдвинуто вниз. Как я могу полностью удалить уведомление?
- Нужно ли мне обернуть вызов «отправки» внутри функции, только потому, что
beforeSend
требуетtrue
в качестве кода возврата? Или есть более элегантный способ? Особенно мне не нравится глобальныйm
переменная
Edit:
Согласно некоторым комментариям и ИНГ некоторых 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)
}
});
Который, кажется, работает но на самом деле не удовлетворительно из-за вопросов выше
попробовать _setTimeout() _ – tonoslfx
Спасибо. Я предполагаю, что вы имеете в виду 'complete: setTimeout (function (response) {...}'. Я бы этого не сделал, потому что в этом случае полная функция всегда вызывается с задержкой, независимо от того, был ли запрос быстрым или Нет. Я думаю, что это довольно хакерское решение. – ProfHase85