2014-01-04 2 views
1

Я использовал JFK's метод для заполнения Fancybox 2.1.5 через Ajax вместо элементов, как показано здесь FancyBox get href for images via AJAX Это работает довольно хорошо, но проблема в том, что нет возможности ограничить количество записей называется. Если в галерее 4000 изображений, Fancybox займет много времени. Итак, я ограничил свой SQL запрос до 16 records. Затем я использую условие и функцию, чтобы сказать fancybox получить следующие 16 записей, когда он попадает в последний из текущей группы. Проблема в том, что она не добавит новые изображения в группу. Я использую метод также JFK's ответ здесь Load next Images via Ajax and add to Fancybox, чтобы добавить в группу Fancybox, используя $fancybox.group.push, который не работает для меня.Fancybox - Добавить изображения в галерею через ajax

Во-первых, вот код jQuery для получения дополнительных изображений через json. переменная pid является идентификатором фотографии, с которой начнет работать база данных при получении следующих 16 записей. a_id - это альбом. Эта функция называется внутри функции afterLoad fancybox, где находится остальная часть моего кода. Слишком долго было публиковать все это. Толчок функция вызывается, когда обычай следующий щелчке стрелки с помощью onclick();

function push(pid, a_id){ 

     var act = "thtr"; 
     var module = "photos"; 
     var push = 1; 
     $.ajax({ 
      type: "POST", 
      url: "/ajax.php", 
      data: {"a_id": a_id, "act": act, "pid": pid, "push": push, "module": module}, 
      success: function(response){  
      var arrayObj = $.parseJSON(response); 
      $.fancybox.group.push(arrayObj); 
      alert($.fancybox.group.length); 
      $.fancybox.next(); 
      } 
     }); 
} 

$fancy.group.push не работает. Ответ ajax, который я получаю, совпадает с исходным ответом ajax, когда fancybox сначала открывается, за исключением 16 новых записей. Ответ json отформатирован, как показано ниже. Кстати, в ответе json есть несколько дополнительных элементов, которые я использую для других вещей, которые игнорируются в противном случае, так что это не проблема. Группа изначально имеет 16 записей, но после запуска функции push она оповещает об 17, но ничего не изменилось. Он должен предупредить о возврате 32, если он вытащил еще 16 или сколько-нибудь сервер отвечает. Не уверен, почему он не работает. Невозможно найти что-либо еще при добавлении в группу.

[{"href":"https:\/\/cdn1.mysite.com\/photos\/c5\/c7\/45\/c5c745a424b9a2f.jpeg","type":"image","pid":"77695","owner":"12219","purl":"https:\/\/mysite.com\/photo?per=12219&set=77695.15735&s=0","aurl":"\/view-photo_album-1jpIbSZgIsV.html","isDom":false},...etc] 

ОБНОВЛЕНИЕ

Группа обновляется с помощью $.fancybox.group.push, как предупреждение показывает 32 объектов в этом сейчас. Но по какой-то причине fancybox не обновляется, потому что вместо следующего перехода к новому изображению ударяет следующий цикл.

UPDATE2

Толчок работает, если я вручную выписывать строку ответа в функцию как в этом примере:

$.fancybox.group.push(
       { href: "images/04.jpg", type: "image", title: "Picture 04", isDom: false }, 
       { href: "images/05.jpg", type: "image", title: "Picture 05", isDom: false } 
); 

Не знаю, почему он не будет работать с переменной, как это. Это тоже произошло из ответа.

$.fancybox.group.push(arrayObj); 

ответ

1

Наконец-то выяснилось, что другие вопросы ответа JSON. По какой-либо причине использование метода $.fancybox.group.push, использующего переменную, похоже, работает, если вы перебираете объект с помощью $.each. Надеюсь, это может помочь кому-то еще, кто хочет полностью использовать Fancybox.

Вот моя законченная функция.

function do_push(pid, a_id){ 

     var act = "thtr"; 
     var module = "photos"; 
     var gpush = 1; 
     $.ajax({ 
      type: "POST", 
      url: "/ajax.php", 
      data: {"a_id": a_id, "act": act, "pid": pid, "push": gpush, "module": module}, 
      success: function(response){  
      var arrayObj = $.parseJSON(response); 
      $.each(arrayObj, function(index){ 
       $.fancybox.group.push(arrayObj[index]); 
      }); 
      $.fancybox.next(); 
      } 
     }); 
} 
+0

Вы должны просто изменить АЯКС DATATYPE как это ** DATATYPE: "JSON" ** –

0

если вы используете Fancybox 2.умноженную просто использовать это решение:

JSon Response

{"images":[{"href":"images/04.jpg","type":"image","title":"Picture 04","isDom":"false"}, {"href":"images/05.jpg","type":"image","title":"Picture 05","isDom":"false"}]} 

Javascript Функция

function do_push(pid, a_id){ 
     var act = "thtr"; 
     var module = "photos"; 
     var gpush = 1; 
     $.ajax({ 
      type: "POST", 
      url: "/ajax.php", 
      dataType: "json", 
      data: {"a_id": a_id, "act": act, "pid": pid, "push": gpush,"module": module}, 
      success: function(response){  
       $.fancybox(response.images); 
      } 
     }); 
} 
Смежные вопросы