0

このスクリプトは、送信時にフォームをクリアし、応答をフェードインおよびフェードアウトしますが、何らかの奇妙な理由でフォームを 2 回送信しています。ユーザーが 2 回送信した情報の送信を停止するにはどうすればよいでしょうか?

コードは次のとおりです。

 <script type="text/javascript">
            jQuery(document).ready(function() {
                var clearOnSuccess = function() {
                    if (jQuery('#emailSubmit').length > 0) {
                        jQuery('#email').val('');
                    }
                };
                clearOnSuccess();

                jQuery('#signup').submit(function() {
                    var data = jQuery(this).serializeArray();
                    data.push({'name': 'ajax', 'value': 1});
                    var jqXHR = jQuery.ajax({
                        url: jQuery(this).attr('action'),
                        type: jQuery(this).attr('method'),
                        data: data
                    });

                    jqXHR.done(function(data) {
                        jQuery('#response').fadeIn(1500).delay(3500).fadeOut(1500);
                        clearOnSuccess();
                    });
                    return false;
                });
            });
        </script>
4

1 に答える 1

2

jQuerysubmit()ハンドラーでは、フォームが送信されたらコードを実行するだけですが、そのデータをサーバーに対して再度 AJAX 処理しているため、2 つのコピーを受け取ります。を使用してフォームの送信を停止し、呼び出しevent.preventDefault()で一度だけ情報を送信してみてください。.ajax()

...
           jQuery('#signup').submit(function(e) {
                e.preventDefault();
                var data = jQuery(this).serializeArray();
                data.push({'name': 'ajax', 'value': 1});
                var jqXHR = jQuery.ajax({
                    url: jQuery(this).attr('action'),
                    type: jQuery(this).attr('method'),
                    data: data
                });
                ...
           });
 ...
于 2013-06-23T02:07:56.660 に答える