Я хочу сделать слайдер изображений, которые с каждым слайдом не повторяются, а загружаются с сервера через ответ 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 добавляет изображения, но не перемещает их. И при следующем нажатии он не добавляет изображения.
$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
не будет работать в первую очередь.
Надеюсь это поможет.
Других решений пока нет …