0

送信するとdivに投稿するフォームがあります。さて、私は二重提出を受け取っているという問題を見つけたので、見つけたいくつかのjqueryプラグインを適用しようとしましたが、十分に速くダブルクリックした場合でも二重提出を受け取ったため、それらは役に立ちませんでした。私が見つけたものから、私はそれを防ぐための最良の方法を見ました

 if (this.beenSubmitted) return false;
 else
 this.beenSubmitted = true;

しかし、フォームを再度送信する必要がある場合、ユーザーはフォームを送信するためにページを更新する必要があることに気付きました。私の場合、送信後に再度送信できるようにしたいと思います(内容が異なるため、矛盾していません)。それをよりよく説明するために、このフォームはアイデアを投稿します。2つの異なるアイデアを投稿したい場合は、投稿するページを更新する必要があります。十分な速さでクリックした場合、二重送信を防ぐと、同じアイデアを2回送信するのに役立ちます。だから、私がしたことは、この「5000」を追加したことです。

 if (this.beenSubmitted) return false, 5000;
 else
 this.beenSubmitted = true;

だから、今それは私のページを更新しました。しかし、私は少しうるさいです、笑。そのため、ページ全体を更新する必要があるのは面倒です。入力してから更新するとどうなりますか。私はいつでも5000を下げることができますが、Webサイトを閲覧したり、ズームインしたりすると、リフレッシュすることになります。

だから、私の質問は、フォームを更新する方法はありますか?または、このケースで実際に機能する二重送信(数秒後に送信できる)を防ぐためのより良い方法はありますか?

これはスクリプトです:

<script type="text/javascript">
$(document).ready(function(){
$("form#myform").submit(function() {
        var addcontent = jQuery('#addcontent').attr('value');

        if ( addcontent.replace(/\s/g,"") == "" ) return false;
        if (this.beenSubmitted) return false,5000;
            else
            this.beenSubmitted = true;

$.ajax({
type: "POST",
url: "post.php",
data:"addcontent="+ addcontent,
success: function(){blah blah blah, ton sof code here including pagintion here, insert into a div here also, if u need this let me know.
});
</script>

そのほとんどは、ここで質問をすることから行いました。私のJqueryとAjaxの知識は最高のものではありません。

助けてくれてありがとう=}

4

3 に答える 3

1

ExpressJSでの悪意のある動作を防ぐためのレート制限

上記のリンクには、送信ボタンにタイマーを設定して、3秒以内に再度クリックできないようにする方法があります。

<script>
var submitTimer = new Collate(3000);
</script>
<form action="post" onsubmit="return submitTimer.idle();">
于 2012-09-19T03:19:44.667 に答える
0

this.beenSubmitted = trueアプローチを使用して、タイムアウトと組み合わせないのはなぜですか?たとえば、5000ms後にタイムアウトを実行し、this.beenSubmittedをfalseに設定します。

于 2012-09-19T02:38:31.617 に答える
0

ステートメント:

  return false, 5000;

常に戻り5000ます、の使用falseは冗長で無意味です。

ページをリロードせずにフォームをリセットするには(一部のブラウザでは必ずしもフォームがリセットされるとは限りません)、リセットボタンを使用するか、フォームのリセットメソッドを呼び出します。フォームがリセットされた場合は、 onresetリスナーを使用してbeenSubmittedプロパティを更新できます。

フォームが発明されて以来、フォームの複数の送信が問題になっています。通常、フォームはサーバーで処理されます(2つの同一の要求を受信した場合は、2番目を無視します)。

サーバーが何をしているのかわからず、フォームを再送信する必要があるかどうかを推測する必要があるため、クライアントでスクリプトを使用することは信頼できません。

于 2012-09-19T03:25:37.113 に答える