Это решение работает для меня: -
jQuery.ajax({
type: "POST",
url: ajax_url,
data: ajax_data,
dataType: 'json',
cache: false,
success: function(response) {
if (response.length > 0) {
var $container = $('#container');
var msnry = $container.data('masonry');
var elems = [];
var fragment = document.createDocumentFragment();
for (var x in response) {
var elem = $(response[x]).get(0);
fragment.appendChild(elem);
elems.push(elem);
}
$container.appendChild(fragment);
msnry.appended(elems);
}
}
});
TComponent
очевидно хочет иметь возможность искать в потоке, из которого он читает или записывает, и обычно вы не можете сделать это со сжатыми потоками - по крайней мере, не в обратном направлении. После того, как вы прочитали байт, вы не можете вернуться и прочитать его снова, потому что то, какое именно значение вы получите, может зависеть от всего содержимого потока, которое в первую очередь привело к этому байту. Обратный поиск для повторного чтения одного байта может означать повторное чтение всего потока. А для записи, чтобы вернуться и «исправить» какую-то область потока, изменение одного байта означало бы необходимость повторного сжатия всего, что идет после него. Итак, вы можете понять, почему сжатые потоки не любят обратный поиск.
Запишите свои данные в TMemoryStream
, а затем скопируйте содержимое этого потока в сжатый поток. Читать, скопируйте поток распаковки в TMemoryStream
, а затем загрузите оттуда свои компоненты. (Не забудьте вернуть свойство Position
в ноль перед загрузкой компонента из потока памяти.)