Мой ajax-запрос истекает (или очень медленно) - PullRequest
0 голосов
/ 15 ноября 2010

Мой первый выход на веб-страницы ajax вызывает у меня некоторые проблемы.

Моя основная структура состоит в том, что у меня есть таблица на странице, которую я хочу перезагрузить, не обновляя всю страницу.

Таким образом, при нажатии кнопки на странице это срабатывает:

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);
    }
  });
}

А у меня в коде bedind страницы aspx:

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

Этот метод просто захватывает некоторые данные и создает HTML-таблицу - ничего особенного.

Когда возвращаемая таблица мала (десяток строк или меньше), она работает как шарм. Но когда он становится больше, это занимает много времени.
При 100 строках обработка таблицы может занять 5 минут.
На 1000 строк я оставил его на 30 минут, и ничего не произойдет после затухания.
(Примечание: он загружается довольно быстро при загрузке страницы до использования обновления ajax, поэтому проблема заключается не в создании таблицы на стороне сервера).

Это моя первая настоящая попытка сделать что-то подобное, так что я не знаю, является ли это лучшим способом сделать это - это было просто то, что я собрал, которое отлично работало, когда я тестировал с небольшими наборами данных. Теперь не так много.

Есть идеи, как я могу сделать его пригодным для использования?

1 Ответ

1 голос
/ 15 ноября 2010

Если возможно, используйте WCF вместо этого, это должно быть намного быстрее.

В любом случае, не передавайте необработанный HTML обратно, попросите службу вернуть свернутые данные в формате JSON, а затем используйте эти данные в событии onsuccess для создания таблицы на лету с помощью jQuery.

Например, пусть служба возвращает массив JSON с 1000 элементами, затем выполняет итерацию этого массива и добавляет по одной строке для каждого элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...