Необходимо отображать данные по мере их возврата с помощью веб-сервиса/jquery.

У меня есть операция (которую я не могу изменить), которая запускает потоки, которые обращаются к нашей базе данных Oracle, чтобы узнать, есть ли свободные номера в определенной гостинице на определенную дату.

Если комбинация даты/отеля доступна, этот поток возвращает информацию о дате/отеле в форме DataTable, которая объединяется с Main DataTable результатов. Да, я знаю... Это досталось мне по наследству.

Поэтому я пытаюсь переписать эту операцию. Я все еще должен запрашивать Oracle в потоках, чтобы получить информацию о доступности, но я хочу отображать данные по мере их возврата (порциями по 5, 10? Я гибкий), вместо того, чтобы пользователь сидел перед экраном для до 4 минут, прежде чем полный результат будет выложен в GridView.

Как мне сделать это непосредственно со страницы .aspx, чтобы я мог сделать вызов веб-службы и заполнить сетку (JqGrid?) результатами?

Если я не предоставил достаточно информации или не описал, чего я пытаюсь достичь, дайте мне знать, и я уточню.


person TheGeekYouNeed    schedule 02.08.2011    source источник


Ответы (1)


Oracle предоставляет в каждой строке поле с именем rowid (http://www.adp-gmbh.ch/ora/concepts/rowid.html).

В первый раз, когда вы отправляете запрос, отправьте int (x), чтобы определить, какой максимальный номер строки вам нужен. Попросите службу вернуть общее количество строк и первые x строк.

Затем, во второй раз, когда вы отправляете запрос, получаете следующие x строк, промываете и повторяете.

По сути, вам нужно каждый раз отправлять ajax-запрос для строк с x по y, пока вы не загрузите их все.

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

person Joseph Hamilton    schedule 02.08.2011
comment
К сожалению, я не могу вернуть rowid, так как вызываю хранимые процедуры Oracle, которые нельзя изменить в настоящее время. Но потоки, выполняющие вызовы Oracle, разбиты на части, как вы описываете. Каждый поток может возвращать только одну строку (что отстой), но мне приходится с этим сталкиваться. Итак, вместо того, чтобы отпускать все эти потоки сразу, я могу разбить их на группы — но что я верну? Массив объекта? И пока я продолжаю вызывать свой веб-сервис для возврата элементов, как мне добавить результаты к чему-то вроде jqgrid? Пример кода и ссылки великолепны, это моя первая попытка - person TheGeekYouNeed; 03.08.2011
comment
в чем-то вроде этого. Я немного знаю javascript, но это не моя сильная сторона. - person TheGeekYouNeed; 03.08.2011
comment
Вы вернете JSON, который выглядит так: [ {myProperty: Value, AnotherProperty: 1234}, {myProperty:Value, AnotherProperty:2343} ] Квадратные скобки обозначают массив, каждый объект заключен в фигурные скобки. Но вы не хотите создавать это вручную, используйте DataContractJSONSerializer, который предоставляет .NET. В конце javascript используйте JSON.parse для преобразования строки в фактические объекты Javascript (обозначение объекта Javascript = JSON). - person Joseph Hamilton; 04.08.2011
comment
Что касается JqGrid, он использует декларативную модель, вы указываете URL-адрес, откуда он может получить JSON (в строковом формате) и столбцы, и он будет отображать их в сетке. trirand.com/blog/jqgrid/jqgrid.html - person Joseph Hamilton; 04.08.2011