0

ユーザーがチェックボックスをオンにして値の範囲を選択できるフォームがあります。チェックボックスには2つのリストがあり、1つは値として整数を使用し、もう1つは文字列を使用しています。

問題は、チェックボックスで選択した値に基づいて計算結果をユーザーに提示する必要があることです。この計算は非常に遅く、2〜20秒になる可能性があります。

現在、値を計算するajaxリクエストは、ユーザーがチェックボックスをオンにしたときと同じように実行されます。ただし、これにより、クリックするすべてのチェックボックスが要求されます。また、各リクエストで返される計算結果が間違った順序で到着することがあります。これは、最も遅い/最後に到着した応答がユーザーに提示される応答であることを意味します。

選択したチェックボックスと一致する場合にのみ結果を表示するために、ユーザーが選択した値に対する応答を検証する必要はないようです。この問題の最善の解決策はハッシュ値だと思います。しかし、C#とjavascriptの実装で適切なハッシュ関数を見つけるのに少し問題がありました。

結果を返すときにユーザーアクションを返すだけでよいことはわかっていますが、それでもすべての値を比較する必要があり、値の量が非常に大きくなる可能性があります。

最適なのは、サーバーで選択された値のハッシュを生成し、結果が返されたときにクライアントで現在選択されている値のハッシュを生成し、2つを比較すると、結果が選択された値と一致するかどうかを示します。

このようなもの:

$.ajax({
  type: 'POST',
  url: '/Backend/GetCalculatedResult',
  data: { CheckedIntegers: checkedIntegers, CheckedStrings: checkedStrings },
  success: function(data) {
        if(ResultMatchesSelection(data.SelectionHash)) {
            DisplayResult(data.Result);
        }
  },
  dataType: "json",
});

function ResultMatchesSelection(hash)
{
    var selectionHash = .. generate hash from selected items;
    return hash == selectionHash;
}

最後のユーザーアクションの1秒後にajaxリクエストを実行することで、この問題を部分的に修正しました。そのため、ユーザーが5つのチェックボックスを順番にチェックし、それぞれの間に1秒未満の場合、リクエストは5回ではなく、1回だけ実行されます。

本当に2つの組み合わせが欲しいです。

サーバー側とクライアント側の両方でこのハッシュを実行する方法についてのアイデアはありますか?または、これを別の方法で解決する方法についてのアイデアがある場合は、心を話してください:)

4

3 に答える 3

2

requestNo選択した値をハッシュしてajaxの結果で確認する代わりに、jQueryでグローバル変数を宣言し、各ajax呼び出しでその変数値を送信できます(requestNoすべてのajaxリクエストの値をインクリメントします)。

ハッシュ値の代わりにajax応答を返す間、requestNoajaxリクエストで受け取った値を返します。クライアント側で、requestNoin ajax応答が現在のrequestNo値と同じであるかどうかを確認し、同じである場合は結果を表示します。

于 2012-10-12T09:11:49.360 に答える
1

サーバーで計算がまだ行われていることをユーザーに視覚的なインジケーター(画像の読み込み)を使用してみてください。Ajax.ActionLinkを使用している場合は、次を使用してください:http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxoptions.loadingelementid(v=vs.108) .aspx

また、jQueryを使用してこれを行う方法はたくさんあります。jQueryにはajaxメソッドがあります: http ://www.w3schools.com/jquery/jquery_ref_ajax.asp なので、ajaxStartとajaxStop / ajaxCompleteを使用して、読み込み中の画像を表示および非表示にできます。

于 2012-10-12T10:52:42.160 に答える
0

私は別のルートを取りましたが、それは問題をうまく解決しているようです。値をチェックする代わりに、最後のajaxリクエストを保存します。アクションが発生するたびに、最後のリクエストがまだ読み込まれているかどうかが確認され、読み込まれている場合は中止され、新しいリクエストが送信されます。

私が信じているように、2つのリクエストを同時に保留できないようにする場合は、これで問題がうまく解決するはずです:)

于 2012-10-12T10:23:30.947 に答える