Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как получить данные из БД и вывести в модальном окне (https://javascript.ru/forum/jquery/78477-kak-poluchit-dannye-iz-bd-i-vyvesti-v-modalnom-okne.html)

LingVist 20.09.2019 11:50

Да, изображения будут другие, получаемые из БД, шаблон для примера

Собака - это не для проверки, это особенности ларавелевского шаблонизатора blade, она используется для отображения циклов - @for, @foreach, проверок @if b т.д.

Я так думаю, что вместо этого цикла на сервере
@foreach($product->image as $item)
    <li class="">
     <img src="{{ asset('img') }}/catalog/{{ $product->category_alias }}/{{ $item->img }}" alt="">
</li>
@endforeach

нужно сделать цикл в скрипте, а потом уже подставить в UL
Вопрос - возможно такое?

laimas 20.09.2019 12:21

Ну если шаблонизатор, тогда ...

То есть нужно точно такой же html код получить как и в шаблоне? Если да, то response.title уже не получиться, ибо response это массив, значит response[0].title. А изображения это response[1]. Обходите циклом его и создавайте элементы li c изображениями, данные для которых берите из этого массива:

$.each(response[1], function() {
    //тут элементы этого массива, например имя изображения (насчет путей к ним не известно)
    this.img
})


Как создавать и добавлять элементы в JQ думаю не надо рассказывать.

LingVist 20.09.2019 16:19

Огромное спасибо, все работает. Добавляю картинки так:
$(".product-preview").append("<li><img src='{{ asset('img') }}/catalog/"+response[0].category_alias+"/"+this.img+"'></li>");

Только небольшой косяк - после закрытия модального окна продукта, если открыть следующее окно, то старые картинки остаются, а к ним добавляются новые. Подозреваю, что дело в методе append(). Может какой другой использовать или сделать прерывание функции после открытия окна? Я пробовал добавить return false, не помогло

laimas 20.09.2019 16:49

Можно очищать перед запросом родителя - $(".product-preview").empty(), можно не .append(), а готовить html и вставлять его, старый при этом будет перезаписан. Но, если "открыть следующее окно" означает повторное открытие с теми же данными (ранее полученными), то выгоднее перед запросом проверять - если родитель $(".product-preview") пустой, то делаем запрос и заполняем его данными, и показываем, иначе только показываем.

PS. А откуда на клиенте может взяться {{ asset('img') }}? Это ведь переменная серверная, которая передается в шаблонизатор.

LingVist 20.09.2019 17:08

$(".product-preview").empty() работает прекрасно
Спасибо Вам за помощь, удачи Вам и здоровья!!

laimas 20.09.2019 17:11

А {{ asset('img') }}?

LingVist 20.09.2019 17:25

Забыл :))
Это адрес сайта и папка img. В принципе, можно было написать просто /img, но как-то привык уже

laimas 20.09.2019 17:49

Цитата:

Сообщение от LingVist
Это адрес сайта и папка img.

Ну это понятно по месту в строке src, не понятно откуда на клиенте эта переменная? В посте 9 эта переменная в коде шаблонизатора, что понятно, а в посте 13 всплывает в клиентском коде, она что передается на клиента? И как она будет подставлена?

LingVist 20.09.2019 18:39

Подставится так
$(".product-preview").append("<li><img src='{{ asset('img') }}/catalog/"+response[0].category_alias+"/"+this.img+"'></li>");

laimas 20.09.2019 18:53

И кто же это сделает?


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