2011-07-20 6 views
2

特定のリンクをクリックすると、ストアドプロシージャ呼び出しを行うページが読み込まれます。ストアドプロシージャコールに数秒以上かかる場合、人々はリンクを再度クリックし始めます。彼らがリンクを12回クリックすると、データベース上で実行される数十のクエリを見ることができます。最後のクエリはユーザーに何も返さない唯一のクエリですが、もう一方のクエリはリソースの使用中に完了まで実行されます。ユーザーがリンクを繰り返しクリックしないようにする

これを防ぐにはどうすればよいですか?データベースレベルでこれを停止する方法はありますか、これはインターフェイスの問題ですか?これは、PHPとのデータベース接続をどのようにしているかの結果ですか?

+0

[リンクされた画像で複数回クリックするのを防ぐ方法](http://stackoverflow.com/questions/3892354/how-to-prevent-users-from-clicking-multiple-times- on-a-linked-image) – genesis

+0

解決策は二重になってしまうかもしれませんが、代わりの解決策を探しています。私がデータベースまたはサーバー側(PHP)でこれを対処できるなら、私はjavascriptで要素を無効にすることが望ましいでしょう。 – brian

答えて

7

個人的に私はインターフェイスの問題に取り組んでいます。ユーザーが複数回クリックする理由は、ユーザーが間違っているのではなく、自分のサイトが何をしようとしているかについて何も伝えていないからです。無効なonclickへのリンクを設定し、何らかの種類の読み込みアニメーションを表示し、データでコールバックを取得したらリンクを再度有効にすることを検討してください。このようにして、UIは常にバックエンドの状態を反映し、ユーザーが一連の要求をキューに入れないようにします。

+2

クリックするとリンクを無効にする問題は、たとえば接続が切断された場合などです。コールバックが受信されない場合、リンクを再度クリックすることはできません(2回クリックする正当な理由)、ユーザーが更新する必要がある場合は、フォームのデータが失われる可能性があります。この場合、タイムアウトを使用してリンクを再度有効にします。 – Pindatjuh

+0

非常に良い提案 - あなたが望む最後のものは、保証されていないものに依存するためUIを無効のままにしておくことです。 –

1

1つの解決方法は、クエリの実行中にリンクを無効にすることです。これを行うには、現在のページを更新するローカルのJavaScriptを使用するか、まったくリンクがない別のページに切り替えることができます。サイトのデザインによって異なります。

if (!callingProcedure) 
{ 
    callingProcedure = true; 
    call procedure 
} 

そして、戻りがfalseにcallingProcedureをリセットする場合:

もう一つの選択肢は、それが未設定のだときにのみ、ストアドプロシージャを呼び出すようにコードにガード変数を設定することです。

進捗インジケータがあると、サイトが実際に何かしているというフィードバックをユーザに与えることもできます。

1

リクエストが処理されている間にページをブロックするのに、jQuery BlockUI Pluginのようなものを使用します。これにより、ユーザーは何かが起こっていることが確実になり、再度クリックできなくなります。

関連する問題