2

春のMVCアプリケーションを開発しています。興味深いケースに遭遇しました。

説明を簡単にするために、上部のスタックオーバー フロー ボタンを例に取っています (これらの質問、タグ、ユーザー、バッジ、未回答のボタンを意味します)。

現在、私のアプリには同様のボタンがあります。ユーザーが任意のボタンをクリックすると、適切な引数を渡して ajax 呼び出しが行われます。サーバーは SQL クエリを作成し、結果を返します。

ここで、これらのボタンを絶え間なくクリックし続ける私のようなクレイジーなユーザーがいるとします。したがって、クリックするたびに ajax 呼び出しが行われます。そして、操作を完了したものがフロントエンドに表示されます。そのため、ユーザーが最後に [タグ] ボタンをクリックした場合でも、それが表示され、フロント エンドに戻るのに時間がかかった前の質問をクリックすると、ページが上書きされる可能性があります。どうすれば修正できますか?(ユーザーが最後にクリックしたときにタグデータを表示したい)

そもそも、ユーザーが最初に質問をクリックしてからタグをクリックすると、質問ボタンのSQLを照会する必要がなくなることを知っています。質問ボタンのSQLクエリの処理を停止する方法はありますか.

ありがとう

4

3 に答える 3

2

これを処理する最善の方法は、ユーザー インターフェースを使用することです。ユーザーがバックエンドで重要な処理を必要とする何らかのアクション (画像をクリックする) を行った場合、UI は、ページ上の他のアクションがそれ以上メッセージをバックエンドに送信しないようにする必要があります。元のリクエストが完了しました。

これに視覚的に取り組む方法は、他の要素を無効化/グレー表示する、何らかの作業が進行中であることを明らかにする (スピナー、プログレス バーを使用) などです。

サーバー側では、各 HTTP 要求は独立しているため、サーバーにロジックを追加して、この現在の要求を行っているユーザーが現在処理中の別の進行中の要求を持っているかどうかを検出できるようにするのは面倒で困難です。

于 2013-04-24T18:38:52.890 に答える
1

おそらく、Cookie の助けを借りる必要があります。アクションが初めて実行されるとき、いくつかの Cookie を書き込みます。毎回、処理する前にその Cookie を確認してください。

UI からリンクまたはボタンを単純に無効にして、ユーザーが無効にできないようにすることはできません。それは常に複数の方法で行うことができます。追加のチェックが必要です。

(私はあなたの投稿を完全に読んでいません。しかし、最初の回答から私が理解していることから...)

于 2013-04-24T19:07:40.253 に答える
1

同様の問題があり、この方法で対処しました。

私は手作業で ajax 呼び出しを行いました (jQuery などとは対照的に)。

単一のグローバル XMLHTTPRequest がありました。

var xhr = new XMLHTTPRequest();

ユーザーが ajax 呼び出しを必要とする何かをクリックしたとき、既に実行されている場合は、以前の呼び出しを中止しました。

if( xhr.readystate !=0 || xhr.readystate !=4 )
   xhr.abort();

次に、XHR の新しいインスタンスを作成し、ビジネスを行います。

xhr = new XMLHTTPRequest();
xhr.open("GET", myUrl, true);
//attach callback function etc and do the send
于 2013-04-24T20:24:33.833 に答える