2

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. 「送信」呼び出しを関数内にラップする必要があるのは、 as リターン コードbeforeSendが必要なためだけですか? trueそれとももっとエレガントな方法がありますか?m特にグローバル変数が苦手

編集

いくつかのコメントといくつかのグーグルによると、コードを次のように変更しました。

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

これは機能しているように見えますが、上記の質問のために実際には満足のいくものではありません

4

1 に答える 1