2013-11-21 5 views
0

Мне нужно вернуть большое количество данных json через вызов ajax. Есть ли встроенная функция jquery или javascript для обработки «chunking» данныхjquery, ajax, json data chunking

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

+1

http://stackoverflow.com/questions/6789703/how-to-write-javascript-in-client-side-to-receive-and-parse-chunked-response-i – marekful

ответ

0

Один из методов может быть самостоятельной ссылки AJAX функцию опроса что-то вроде ...

(function getData() { setTimeout(function() { 
     $.ajax({ 
      url: "locationofserver", 
      success: function(data){ 

       // handle data returned (append chunks?) 

       // get next bit 
       getData(); 
      }, 
     dataType: "json"}); 
}, 20000); 
})(); 

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

Я бы спросил, почему вам нужно будет его обрезать, вместо того чтобы просто обеспечить постоянное соединение ajax до тех пор, пока оно не будет выполнено? Если вы действительно хотите обрабатывать поток данных, то, возможно, http://signalr.net/ или другие технологии push?

+0

Мне нужно его обрывать, потому что данные возвращаются из запроса базы данных в одной единовременной сумме в зависимости от дат, поэтому мне нужен сервер для разбивки дат и запрашивать только определенный набор данных из базы данных, иначе данные не будут возвращены до тех пор, пока не будет возвращен весь набор данных –

+0

Можете ли вы не только запрашивать базу данных для данных, которые вам нужны (например, для определенного диапазона дат). Если вы говорите, что это невозможно, я бы предложил, чтобы у вас не было выбора, кроме как загрузить все, а затем запросить клиентскую сторону вашего набора данных. У вас есть контроль над логикой базы данных и сервера? Если да, то какой тип и технологии db вы используете. Для меня это действительно похоже на решение на стороне сервера ... Просто для ясности - можете ли вы разместить свой код вызова ajax, чтобы быть уверенным, что мы говорим об одном и том же? – LFN

+0

Ситуация заключается в том, что пользователь запросит отчет для X числа дней, то есть: 30. Таким образом, количество записей в базе данных велико в течение 30 дней. Таким образом, на стороне сервера вместо запроса на db за все 30 дней данных разбить запрос до 7-дневных фрагментов из db, и как только мы получим 7 дней назад, отправьте это в браузер пользователей, затем держите сокет открытым и пойдите, получите еще 7 дней отправить это обратно в браузер и продолжать идти. Я думаю, что нашел решение с использованием JS XMLHttpRequest на стороне клиента и с возвратом CF-сервера кусков json, который обрабатывается с событием onprogress на стороне JS –