Кладка не работает с использованием ajax и бесконечной прокрутки

#javascript #jquery #ajax #jquery-masonry

#javascript #jquery #ajax #jquery-кладка

Вопрос:

В настоящее время я использую AJAX для извлечения данных из нашего веб-сервиса. Проблема, с которой я сталкиваюсь, заключается в том, что он не хочет загружать данные в макет масонства, все, что находится в .social_block поплавках, остается под следующим (и я не установил для них никакого значения с плавающей точкой). Итак, кладка не работает : (

Я хотел, чтобы произошло следующее: загрузите исходные элементы из веб-сервиса в макет кладки, и при «бесконечной» прокрутке он отправит постраничный запрос от веб-сервиса для добавления новых элементов в макет кладки.

Итак, вопросы заключаются в следующем:
— Почему мои элементы веб-сервиса не загружаются с помощью masonry и просто загружаются слева от страницы?
— Как я могу использовать бесконечную прокрутку с моим существующим AJAX-запросом, чтобы он добавлял новые данные в макет кладки, используя код подкачки, который у меня есть, как (загрузка первого запроса http://example.com / автоматически загружается второй запрос http://example.com/1 при первом бесконечном прокручивании, третий запрос http://example.com/2 на второй бесконечной прокрутке и т.д.)?

В качестве дополнительного примечания, если я добавляю alert строку, а не console.log перед $container.imagesLoaded(function(){ , это, похоже, замедляет работу, но затем загружает первоначальный запрос в формат masonry — странно!

 <div id="container">
</div>  
<p id="loadmore">
  <button id="more">'Load More!</button>
</p>

<script src="js/vendors/jquery/jquery-1.10.0.min.js"></script>
<script src="js/vendors/masonry/jquery.masonry.min.js"></script>
<script src="js/vendors/jquery/jquery.infinitescroll.min.js"></script>

<script>
  $(function(){
    var $container = $('#container');
    //alert('Masonry loads items in the nice layout if I do this');
    $container.imagesLoaded(function(){
      $container.masonry({
        itemSelector: '.block',
        columnWidth: 100
      });
    });

    $container.infinitescroll({
      navSelector  : '#loadmore',    // selector for the paged navigation 
      nextSelector : '#more',  // selector for the NEXT link (to receive next results)
      itemSelector : '.block',     // selector for all items to retrieve
      loading: {
          finishedMsg: 'No more pages to load.',
          img: 'http://i.imgur.com/6RMhx.gif'
        }
      },
      // trigger Masonry as a callback
      function( newElements ) {
        // hide new items while they are loading
        var $newElems = $( newElements ).css({ opacity: 0 });
        // ensure that images load before adding to masonry layout
        $newElems.imagesLoaded(function(){
          // show elems now they're ready
          $newElems.animate({ opacity: 1 });
          $container.masonry( 'appended', $newElems, true ); 
        });
      }
    ); 


    // set here so it is in reach
    var page = 0;

    // this will call the required url with new json data.
    function loadPage(page) {
      var url = 'http://example.com/'   page;
      $.getJSON(url, function(data) {
    var cont = $('#container');
    $.each(data.data, function(index, obj) {
      var item = obj.Message;
      cont.append(
        $('<li>', {"class": "block"}).append(
          $('<span>', {"class":                                 item.Type}).append(
            $('<span>', {"class":"post_image"}).append(
              $('<img>', {src:item.postImageLarge})
          )
        )
          )
        )
      )
    });
    //$.each(data.data, function(key, val) { console.log('Data key: ', key, ', Value: ', val)});
      });
     }

     // load more handler

      $('#more').click(function(){
        page = page   1;
        loadPage(page); //load more items
      });

      // initial run with page empty
      loadPage('');

  });
</script>