2016-05-04 27 views
0

私はPHPとajaxによって作成された連絡フォームを持っています。私がSend MessageボタンのボタンのテキストをSending...beforeSendの機能の中にクリックしたときに欲しいです。私はSending...のテキストを約5秒表示するまで、時間をボタンに設定したい。私は以下のようにsetTimeout関数を作成しましたが投稿フォーム中のbeforeSend関数のjQuery Ajax setTimeout

編集コードを動作しないだけであなたがする必要はありません、私はMYD done関数内でいくつかの条件文を追加して、私はcomplete関数内

(function (jQuery, window, document, undefined) { 
'use strict'; 

jQuery('#contactForm').submit(function(event) { 

    var bsnname = jQuery('#bsnname').val(); 
    var bsnsubject = jQuery('#bsnsubject').val(); 
    var bsnemail = jQuery('#bsnemail').val(); 
    var bsnmessage = jQuery('#bsnmessage').val(); 

    jQuery.ajax({ 
     url: 'http://localhost/wp/wp-content/plugins/Yallanpe-BSN/inc/class-contact-inc.php', 
     type: 'POST', 
     data: {'bsnname': bsnname, 'bsnsubject': bsnsubject, 'bsnemail': bsnemail, 'bsnmessage': bsnmessage}, 
     dataType: 'json', 
     cache: false 
    }) 
    .done(function(data) { 
     if (!data.success) { 
      if(data.errors.nameEmpty) { 
       jQuery('#name-field').append('<em class="text-danger">' + data.errors.nameEmpty + '</em>'); 
      } else { 
       jQuery('#name-field .text-danger').fadeOut(25); 
       if(data.errors.nameLengthErrors) { 
        jQuery('#name-field').append('<em class="text-danger">' + data.errors.nameLengthErrors + '</em>'); 
       } 
      } 
      if(data.errors.subjectEmpty) { 
       jQuery('#subject-field').append('<em class="text-danger">' + data.errors.subjectEmpty + '</em>'); 
      } else { 
       jQuery('#subject-field .text-danger').fadeOut(25); 
       if(data.errors.subjectLengthErrors) { 
        jQuery('#subject-field').append('<em class="text-danger">' + data.errors.subjectLengthErrors + '</em>'); 
       } 
      } 
      if(data.errors.emailEmpty) { 
       jQuery('#email-field').append('<em class="text-danger">' + data.errors.emailEmpty + '</em>'); 
      } else { 
       jQuery('#email-field .text-danger').fadeOut(25); 
       if(data.errors.emailFormatErrors) { 
        jQuery('#email-field').append('<em class="text-danger">' + data.errors.emailFormatErrors + '</em>'); 
       } 
      } 
      if(data.errors.messageEmpty) { 
       jQuery('#message-field').append('<em class="text-danger">' + data.errors.messageEmpty + '</em>'); 
      } else { 
       jQuery('#message-field .text-danger').fadeOut(25); 
       if(data.errors.messageLengthErrors) { 
        jQuery('#message-field').append('<em class="text-danger">' + data.errors.messageLengthErrors + '</em>'); 
       } 
      } 
     } else { 
       jQuery('#success-msg').append('<p class="bg-success">Message has been sent</p>'); 
     } 

    }) 
    .fail(function(data) { 
    }); 

    jQuery(document).ajaxComplete(function() { 
     document.getElementById("contactForm").reset(); 
    }); 

    event.preventDefault(); 
}); 
}(jQuery, window, document)); 
+0

...あなたが、その場合にはsetTimeout関数を使用する必要があるとは思いません。しかし、setTimeoutは変更を5秒遅らせることになります。私はbeforeSendの中に送信するボタンを変更して、それをAjaxリクエストのコールバックを使って送信したものに変更します。 –

+0

私がメッセージを送るボタンをクリックすると、送信中のテキストが変わります...成功メッセージが表示されてから約5秒後に表示されます(成功メッセージは正しく動作しますが、約5秒間遅れます) –

+0

なぜあなたは応答が通過するとすぐにテキストを変更しないのですか?あなたが探しているのは、タイムアウトなしでコード内にあるように、ボタンのテキストを送信するように設定することです。ちょうど5秒後にそれを変更するsettimeoutがあります。 –

答えて

2

をいくつかのコードを追加しましたbeforeSendを使用してください。以下に示すように、AJAX関数をsetTimeoutコールバック関数内にラップするだけです。

jQuery('button').text("Sending..."); 

setTimeout(function() { 
    jQuery.ajax({ 
     url: 'http://localhost/wp/wp-content/plugins/Yallanpe-BSN/inc/class-contact-inc.php', 
     type: 'POST', 
     data: {'bsnname': bsnname, 'bsnsubject': bsnsubject, 'bsnemail': bsnemail, 'bsnmessage': bsnmessage}, 
     dataType: 'json', 
     cache: false, 
     success: function (data) { 
      // Some code here work correctly 
     }, 
     error: function() { 
      // Some bug messages 
     }, 
     complete: function() { 
      // good place to change the button back to its original text 
     } 
    }); 
}, 5000); 

しかし、あなたが尋ねるべき最も大きな質問は、これを行うことのポイントは何ですか?ボタンのテキストを変更する要求を遅らせたいだけです。

編集:ここでは、私があなたが欲しいと思うものの簡単なdemoです。

+0

あなたのコードが表示されています...成功とエラーのメッセージの場合はテキストを送信しますが、成功の場合は送信中のテキストを表示したい場合は連絡フォーム内にエラーがない場合を意味します –

+0

いいえ、送信メッセージをクリックして、連絡フォーム内のすべてがOK(空のフィールドのようなエラーがないことを意味します)の場合、5秒間テキストを変更してからこのような成功メッセージを表示してください。 –

+0

これは、AJAXリクエストを行う前にフォームを検証する必要がある、つまりJavaScriptを使用してフィールドを検証する必要があることを意味します。すべてが良ければ、上記を行います。 – Mikey

0

AJAXのbeforeSendは、あなたが望むことを行うためのものです。jaxコールの処理中にメッセージを表示します。

結果が既に表示されているのに対し、ユーザーには読み込み中であるというメッセージを表示するのは紛らわしいものです。

私はあなたが何をしているかのように少し混乱している