2013-12-14 1 views
0

Я в ситуации, когда у меня много тысяч записей или записей базы данных. Я не могу загрузить все эти записи за один раз из-за ограничений памяти.Динамически загружать данные на стороне сервера в slickgrid с помощью ajax

Так что я намерен это сделать, запросить 1000 записей с использованием запроса ajax и загрузить его в slickgrid, а затем постепенно загружать другие записи таким же образом в фоновом режиме, пока не будут загружены все данные (скажем, 50 000 записей) ,

Первые 1000 записей должны быть загружены и последующие записи добавлены в фоновом режиме. Таким образом, пользователь может сначала начать фильтрацию, сортировку и т. Д., Даже если полный набор данных не закончил загрузку.

Я посмотрел на Аякс, например:

http://mleibman.github.io/SlickGrid/examples/example6-ajax-loading.html

Однако он не решает мое динамичное требование загрузки.

Мой вопрос в том, можно ли это сделать легко и если да, то какие функции slickgrid мне нужно будет рассмотреть.

+0

Сколько записей вы упомянули? Вы используете DataView от SlickGrid? Если у вас более 50 000 записей, ваш сервер должен отвечать за фильтрацию, сортировку, разбиение на страницы; в этом случае пример AJAX должен работать на вас. – idbehold

+0

@idbehold Факт, что slickgrid может обрабатывать очень большие наборы данных, и поэтому моя аргументация заключается в попытке не использовать сервер для некоторых задач, которые вы предлагаете. Фильтрация набора данных я сделаю на сервере, но сортировка, вероятно, не будет. Итак, вернемся к моему требованию ... – HGPB

+0

Используете ли вы DataView? – idbehold

ответ

0

Первый ответ

dataView = new Slick.Data.DataView({}); 
dataView.beginUpdate(); 
dataView.setItems(yourjsondata);    
dataView.endUpdate(); 

нагрузки с первой 1000 записи

Поскольку у вас нет столбца ID, вы можете просто перебирать по реакции и добавить UUID или просто увеличиваем счетчик и добавить что я также не имеют идентификатор, и это так, как я его обработки

Все другие реакции АЯКС

dataView.beginUpdate(); 

for(var i = 0; i < yourjsondata.length; i++) { 
    dataView.setItem(yourjsondata[i]);    
} 

dataView.endUpdate(); 

я настоятельно рекомендую делать все извлечения данных для всех АЯКС ответ другой, чем первый в веб-работника, так что вы не блокировать пользовательский интерфейс https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

Вы должны будете использовать ванильный JS, чтобы сделать AJAX запросы не JQuery , В вас работник просто построить массив объектов, а затем на последние ответы отправить его обратно в основной поток

self.postMessage(yourobjectarray); 

Примечание Я это все работает, но не с открытым исходным кодом. Можно поделиться больше фрагментов кода, но не может опубликовать все это.