Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подгрузить список данных через AJAX в fancybox (https://javascript.ru/forum/misc/76072-podgruzit-spisok-dannykh-cherez-ajax-v-fancybox.html)

Lion_astana 01.12.2018 16:07

Подгрузить список данных через AJAX в fancybox
 
Всем привет!
На офиц. сайте fancybox есть пример отображения фото при клике на ссылку:

<p>
  <a id="test" href="javascript:;" class="btn btn-primary">Click me</a>
</p>


$("#test").on('click', function() {

  $.fancybox.open([
    {
      src  : 'https://source.unsplash.com/IvfoDk30JnI/1500x1000',
      opts : {
        caption : 'First caption',
        thumb   : 'https://source.unsplash.com/IvfoDk30JnI/240x160'
      }
    },
    {
      src  : 'https://source.unsplash.com/0JYgd2QuMfw/1500x1000',
      opts : {
        caption : 'Second caption',
        thumb   : 'https://source.unsplash.com/0JYgd2QuMfw/240x160'
      }
    }
  ], {
    loop : true,
    thumbs : {
      autoStart : true
    }
  });

});


Вопрос: как можно внутрь JS вставить данные, полученные функцией AJAX, интересуют эти строки:

src  : 'https://source.unsplash.com/IvfoDk30JnI/1500x1000',
      opts : {
        caption : 'First caption',
        thumb   : 'https://source.unsplash.com/IvfoDk30JnI/240x160'
      }


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

$.fancybox.open([
тут перебор массива, который формирует данные
], {
    loop : true,
    thumbs : {
      autoStart : true
    }
  });


Получаю нужный массив, не могу реализовать его перебор правильно. Цикл FOR внутрь [] не получается вставить... Что-то запутался, как это сделать?

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

Буду благодарен за советы!

рони 01.12.2018 16:20

Цитата:

Сообщение от Lion_astana
тут перебор массива, который формирует данные

тут массив который был ранее сформирован.
Цитата:

Сообщение от Lion_astana
Получаю нужный массив,

тут и надо рыть.

Lion_astana 01.12.2018 16:38

Не получается...

Если вставляю данные как html, то и получаю во всплывающем окне просто текст.

А как массив перебрать в этой конструкции правильно не пойму. Пробовал оставлять [], а внутри цикл FOR - не работает. Пробовал без [] - не работает. Пробовал всю конструкцию формировать в PHP и вставлять строкой - выходит строка.

Чёт голова не варит, не пойму, как подступиться.

рони 01.12.2018 16:42

Lion_astana,
информации недостаточно

Lion_astana 01.12.2018 16:59

Делаю запрос AJAX, тип данных json. Получаю ответ. Например переменная data. В ней массив из строк: https://source.unsplash.com/IvfoDk30JnI/1500x1000, https://source.unsplash.com/0JYgd2QuMfw/1500x1000 и т.д.

В исходном примере опустим пока в JS:
opts : {
        caption : 'First caption',
        thumb   : 'https://source.unsplash.com/IvfoDk30JnI/240x160'
      }

Оставляем только src, так проще.

Должно получиться так:

$.fancybox.open([
    {
      src  : 'https://source.unsplash.com/IvfoDk30JnI/1500x1000'
    },
    {
      src  : 'https://source.unsplash.com/0JYgd2QuMfw/1500x1000'
    }
  ], {
    loop : true,
    thumbs : {
      autoStart : true
    }
  });


Теперь вместо этих строк, прописанных изначально:
{
      src  : 'https://source.unsplash.com/IvfoDk30JnI/1500x1000'
    },
    {
      src  : 'https://source.unsplash.com/0JYgd2QuMfw/1500x1000'
    }


Нужно перебрать мой массив data, полученный ранее.

Lion_astana 01.12.2018 17:13

Если делаю просто [data], то во всплывающем окне выходит [src : https://source.unsplash.com/IvfoDk30JnI/1500x1000,src : https://source.unsplash.com/0JYgd2QuMfw/1500x1000]

Если делаю без квадратных скобок, то во всплывающем окне выходит первый слайд, но вместо фото - строка в центре экрана: https://source.unsplash.com/IvfoDk30JnI/1500x1000, листаю далее - следующий слайд, но по центру адрес второго фото: https://source.unsplash.com/0JYgd2QuMfw/1500x1000

Т.е. все как надо, только вместо фото - их адрес.

рони 01.12.2018 17:20

Lion_astana,
$(function() {
  var opt = {success:function(data) {
    data = data.map(function(src) {
      return {src:src};
    });
    $("#test").on("click", function() {
      $.fancybox.open(data, {loop:true, thumbs:{autoStart:true}});
    });
  }};
  AJAX(opt);
});

Lion_astana 01.12.2018 17:30

Спасибо, то что нужно!!!!
РАБОТАЕТ!!!!!!!!!!!

Lion_astana 01.12.2018 17:38

Супер, а как можно передать теперь и другие поля и как их правильно вытащить?

{
      src  : 'https://source.unsplash.com/IvfoDk30JnI/1500x1000',
      opts : {
        caption : 'First caption'
      }
}


Нужен массив из массивов, в которых две ячейки: первая - https://source.unsplash.com/IvfoDk30JnI/1500x1000, вторая ячейка - First caption.

Получается, если мысли верные, массив приходит такой:

data[0][[0]='https://source.unsplash.com/IvfoDk30JnI/1500x1000',[1]='First caption']
data[1][[0]='https://source.unsplash.com/0JYgd2QuMfw/1500x1000',[1]='Second caption']

Как их теперь принять и спарсить в такой вид как в коде выше?

Lion_astana 01.12.2018 17:57

Все, разобрался, получилось!
Спасибо за все!


Часовой пояс GMT +3, время: 01:30.