Плагин bxSlider объединяется с вызовом ajax при каждом движении слайда и каждый раз динамически меняет источник изображения.

Я хочу сделать слайдер изображений, которые с каждым слайдом не повторяются, а загружаются с сервера через ответ AJAX. Поэтому при нажатии кнопки «вперед» или «назад» мне нужно вызвать через AJAX функцию MySQL, чтобы изменить смещение команды LIMIT для поиска результатов в прямом направлении и при ответе AJAX показать новые изображения.

Мой основной код такой:

<script src="script/jquery.bxslider.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.slider1').bxSlider({
slideWidth: 200,
minSlides: 2,
maxSlides: 3,
slideMargin: 10
});
})
</script>

<div class="slider1">
<?php
$query = "SELECT * FROM vid LIMIT 4";
$result = mysqli_query($conn,$query);
if(!$result){echo 'error with query';}
while ($row = mysqli_fetch_assoc($result)) { ?>
<div class="slide">
<img class='img_res'src='<?php $src = "images/"; echo  $src.$row['namev_id'].".png";?>' alt="Bacn">
</div>
<?php } ?>
</div>

Я предполагаю, что при нажатии кнопки «вперед» или «назад» присоединить вызов AJAX и при ответе изменить источник изображений:

$('.forward_btn').click(function(){
$.ajax({url: "load_results.php", success: function(result){
$("#slider1").append("<div><img src='result'></div>");
}});

Но, конечно, это не сработает, потому что мне нужно изменить массив $ row со старого массива результатов на новый — результат AJAX. Плагин работает так, что он повторяет изображения снова и снова, в то время как мне нужно каждый раз нажимать кнопку слайдера, чтобы изменить src каждого изображения, то есть изменить массив строк. Здесь я в значительной степени застрял. Сейчас я беспокоюсь о том, что я не совсем понимаю, как передать новый src из результатов вызова AJAX, если вызов возвращает массив.

Мой вопрос — как мне динамически изменить массив $ row со старых результатов MySQL на новые результаты AJAX? Есть ли способ сделать это?

Пока что я достиг:

   $('.bx-next').click(function(e){
e.preventDefault();
$('.slider1').append('<div class="slide"><img src="https://web-answers.ru/wp-content/uploads/2019/02/57d54a2e53324.png"></div>');
$('.slider1').append('<div class="slide"><img src="https://web-answers.ru/wp-content/uploads/2019/02/57d54a2e53324.png"></div>');
$('.slider1').append('<div class="slide"><img src="https://web-answers.ru/wp-content/uploads/2019/02/57d54a2e53324.png"></div>');
$('.slider1').append('<div class="slide"><img src="https://web-answers.ru/wp-content/uploads/2019/02/57d54a2e53324.png">   </div>');
slider.reloadSlider();
});

Этот код при первом нажатии кнопки bnext добавляет изображения, но не перемещает их. И при следующем нажатии он не добавляет изображения.

1

Решение

$row переменная php на стороне сервера

click Обработчик событий выполняется в клиенте (браузере).

Вам понадобится какой-то протокол для связи между ними, но это будет сложно.

Я думаю, что ваш код почти на высоте. Я поверхностно проверил документацию по bxSlider и ничего не нашел по обновлению содержимого слайдера. Итак, что происходит в вашем коде, так это то, что вы говорите bxSlider использовать первые 4 элемента слайдера, которые вы получаете из базы данных. Затем по щелчку ползунка вы добавляете новые вещи в HTML, но ползунок никогда не узнает о них. Поэтому я бы предложил следующее:

$('.forward_btn').click(function(){
$.ajax({url: "load_results.php", success: function(result){
$("#slider1")
.append("<div><img src='result'></div>")
.bxSlider({
slideWidth: 200,
minSlides: 2,
maxSlides: 3,
slideMargin: 10
});;
}
});

Таким образом, bxSlider также знает, как использовать новый img. Таким образом, ваш слайдер будет увеличиваться на 1 при каждом нажатии. Если вы хотите, чтобы ползунок был равен 4, вы можете удалить первого потомка <div class="slider1">, Посмотрите этот вопрос, как это сделать: Как удалить первый дочерний элемент, на который ссылается $ (this) в Jquery?

Может случиться так, что bxSlider изменит ваш html до неузнаваемого, но тогда у вас возникнет другая проблема, потому что ваш .append не будет работать в первую очередь.

Надеюсь это поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]