ajax表单发送通知jquery

时间:2013-09-12 15:19:08

标签: jquery ajax pnotify

我有一个表单,我通过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. 我是否真的需要在函数中包含“发送”调用,只是因为beforeSend需要true作为返回码?还是有更优雅的方式?特别是我不喜欢全球m变量
  4. 修改

    根据一些评论和一些谷歌的说法,我将我的代码更改为:

    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 个答案:

答案 0 :(得分:0)

以下方式更容易4我。 可以提供帮助:

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(); }
);