0

私はいくつかのデータをフェッチするためにAJAX呼び出しを行っているWebアプリケーションを持っています。データは100Kbから1Mbsまで変化する可能性があります。また、バックエンドで多くの処理を行う必要があるため、この呼び出しには多くの時間がかかります。

私は2つの基本的な問題に直面しています:

1)時間がかかるので、エンドユーザーがイライラしないように、AJAX呼び出しのステータスをエンドユーザーに示す必要があります。最初のAJAX呼び出しの進行状況を確認するために、しばらくしてからAJAX呼び出しを行う方法があるかどうかを考えていました。それとも、何か提案できるでしょうか。

2)データを受信すると、JavaScriptでページをペイントしているため、ブラウザのタブが1〜2分ほどハングすることがあります。この吊り下げ時間を停止または短縮する方法はありますか?

どんなアドバイスも本当に役に立ちます。ありがとう。

4

2 に答える 2

1
  1. AJAXはクライアント側でステータスイベントを提供しますが、あなたの場合、エンドユーザーに進行状況を送信したいので、それがうまくいくとは思いません.iframeを使用してajax呼び出しを行うことでそれをだますことをお勧めします.サーバーからクライアントへの進行状況を常にフラッシュします。

  2. データが巨大で、ブラウザがハングすることが明らかなペイントを開始する場合は、setTimeout / setInterval を使用するようにペイント メカニズムを改良することをお勧めします。また、ステップ 1 に従えば、サーバーからフラッシュされたデータの操作を開始できます。完全なデータが終了するまで待機

編集 - iframe 経由で進行状況を表示する方法

コンテンツ全体があり、ajax 呼び出しを行う main.aspx があるとします。

サーバーからのデータを提供する info.aspx もあります。

info.aspx には 6 つのステップが含まれており、すべてのステップについてユーザーに通知したいとします。

//Step 1 - do some thing
Response.Write("<script>progress = '10'; progressText = 'Completed step 1'; ");
Response.Write(" updateProgress(); </script>");
Response.Flush();

//Step 2 - do some thing
Response.Write("<script>progress = '30'; progressText = 'Completed step 2'; ");
Response.Write(" updateProgress(); </script>");
Response.Flush();

上記の場合、progress および progressText 変数を更新し、updateProgress()javascript を呼び出すと、updateProgress は次のようになります。

function updateProgress()
{
    //update parent window/container on the progress which will show an visual indicator of the progress
}

updateProgress() 関数は最初にフラッシュされます

于 2012-10-09T07:20:14.237 に答える
0

よし、通り抜けた。実際に iFrame を描画しなくても、進行状況を確認できました。私は単純にセッション変数を作成し、サーバー側でその値を更新し続けました。毎秒トリガーするようにタイムアウト関数を設定し、AJAX 呼び出しを行ってセッション変数の値を確認しました。サーバーに余分な負荷がかかっていることは知っていますが、今のところ他の方法はわかりません。これ以上の提案は大歓迎です。

于 2012-10-09T12:34:23.437 に答える