1

次のシナリオを考えてみましょう: ダイアログ (jquery ダイアログ) を開くことができるページがあります。このダイアログにより、ユーザーは値を更新したり、新しい値を挿入したりできます。ユーザーが [確認] ボタンを数回クリックすると、クリックした回数だけ更新または挿入が開始されます。このメソッドは ajax 呼び出し (jquery ajax) によって起動され、成功するとユーザーに「完了しました」というメッセージが表示されます。

更新シナリオでは、メソッドが呼び出されるのと同じ回数、サーバー コードがデータベースで更新コマンドを呼び出す必要がありますが、問題ありません。ただし、挿入の状況では、データが数回送信され、データベースにいくつかの行が挿入されます。これは、他の分野で多くの問題を引き起こします。

私の問題の理想的な解決策となる post-redirect-get パターンについて読みました。しかし、それは非ajax投稿についてのみ述べています。メソッドへの呼び出しが ajax 呼び出しを介して行われる場合はどうでしょうか? ユーザーが同じものを何度も送信するのを防ぐには?

ダイアログのボタンをブロックしようとしましたが、機能しますが、特にユーザーのブラウザに問題がある場合、ボタンが常にブロックされるとは限らないため、悪い解決策だと思います。

4

2 に答える 2

0

ネイサン・テイラーの解決策は可能で正しいものでしたが、私はもっと単純なことをしたいと思いました。フォームが送信されたかどうかを確認するローカルブール値を作成しました。フォームが初めて送信されると、この変数はそれを受け取りtrue、それ以上の送信を防ぎます。以下のコードを確認してください。

<script type="javascript">
var isSubmit = false;

$('#myForm').submit(function(){
  //Check if this is the first time the form is submitted
  if(isSubmit === true){
  return false;
}
isSubmit = true;
//Executes the form submission as it should be
});
</script>

isSubmitダイアログスコープでこの変数を作成することを忘れないでください。そうしないと、変数を別の場所で変更しない限り、このフォームを送信できなくなります。

于 2012-09-14T17:22:29.153 に答える