0


0

Ajaxリクエストがタイムアウトする(または本当に遅い)

Ajax Webページへの最初の放棄は、いくつかの問題を引き起こしています。

私の基本的な構造は、ページ上にテーブルがあり、ページ全体を更新せずにリロードすることです。

そのため、ページ上のボタンをクリックすると、これが発生します。

function RefreshMissionsAjax() {
  //fade out the old table.
  $(clientID('MissionsDisplay')).fadeOut(500);

  //request the new value from the page (calls the GetIncompleteMissions() method in the MissionViewer.aspx.cs page)
  $.ajax({
      type: "POST",
      url: "MissionViewer.aspx/GetIncompleteMissions",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function (msg) {

      $(clientID('MissionsDisplay')).html(msg.d);
      $(clientID('MissionsDisplay')).fadeIn(500);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        $(clientID('MissionsDisplay')).html('An error occured while trying to refresh the page data.');
        $(clientID('MissionsDisplay')).fadeIn(500);
    }
  });
}

そして、私はaspxページのコードベッドインにあります:

[WebMethod]
public static string GetIncompleteMissions()
{
    return GetHTMLTable();
}

このメソッドはいくつかのデータを取得し、htmlテーブルを作成します-あまり凝っていません。

返されるテーブルが小さい場合(数十行以下)は、チャームのように機能します。 しかし、それが大きくなると、長い時間がかかります。 + 100行では、テーブルのレンダリングに5分かかることがあります。 + 1000行で30分間放置したが、フェードアウト後は何も起こらない。 +(NB-ajaxリフレッシュが使用される前に、ページロードでかなり迅速にロードされるため、問題のあるテーブルの実際のサーバー側の作成ではありません)。

これはこのようなことをする最初の本当の試みですので、これがそれを行うための最良の方法であるかどうかはわかりません-それは小さなデータセットでテストしていたときにうまく機能したものでした。 今はそれほどでもありません。

どのようにそれを使用可能にすることができますか?

1 Answer


1


可能であれば、代わりにWCFを使用してください。かなり高速になります。

とにかく、生のHTMLを返さず、サービスがJSON形式で最小化されたデータを返すようにしてから、このデータをonsuccessイベントで使用して、jQueryでオンザフライでテーブルを作成します。

たとえば、サービスが1000個のアイテムを含むJSON配列を返し、この配列を繰り返して、アイテムごとに1行を追加します。