@lemonlimelike

Почему ajax запрос выводит undefined?

Перешел на pdo, и при ajax запросе данные выводятся, но отображаются словом undefined
Вот ajax запрос
$(document).ready(function (){
			var num = 21;
			var inProcess = false;
			$(window).scroll(function(){
			  if ($(window).scrollTop() + $(window).height() >= $(document).height() - 700 && !inProcess ){
			  	console.log("1");
			  $.ajax({
				url: '../load.php',
				method: 'GET',
				dataType:'json',
				data: "num="+num,
				beforeSend: function(){
				  inProcess = true;
				},
					success: function(data){
						$.each(data, function(index, data){
						$(".video").append('<div uk-scrollspy="target: > div; cls:uk-animation-fade; delay: 200"><div class="uk-card uk-card-default"><div uk-lightbox><a href="media/' + data.place_of_location + '.mp4'+'" caption="Video"><div class="uk-card-media-top uk-inline uk-inline-clip uk-transition-toggle"><img class="uk-transition-scale-up uk-transition-opaque" src="media/images/' + data.img + '.jpg' + '" alt="' + data.title + '"><div class="uk-position-medium uk-position-cover uk-overlay uk-flex uk-flex-center uk-flex-middle uk-light"><span uk-icon="icon: play-circle; ratio: 3.5"></span></div><div class="uk-light uk-position-bottom-left"><span class="uk-icon uk-icon-image uk-light" style="background-image: url(media/views.png)"></span><span class="uk-text-large">' + data.views + '</span></div></div></a></div><div class="uk-card-body"><p>' + data.title + '</p></div></div></div>');
						});
						inProcess = false;
						num += 12;
					}
			  });
			  }
			});
		});


Вот обработчик
$num = (int)$_GET['num'];  //
$lim = 12;

$sql_1 = "SELECT * FROM `video` ORDER BY `id` DESC LIMIT {:num}, :lim";
$std = $pdo->prepare($sql_1);
$std->bindParam(':num', $num);
$std->bindParam(':lim', $lim);
$std->execute();
$std->fetch(PDO::FETCH_ASSOC);

echo json_encode($std);


А вот запрос который выводит данные из бд
$limit = 22;
$sql_2 = "SELECT * FROM video ORDER BY id DESC LIMIT ?";
$mov = $pdo->prepare($sql_2);
$mov->bindValue(1, $limit, PDO::PARAM_INT);
$mov->execute();
  • Вопрос задан
  • 1408 просмотров
Решения вопроса 1
@AlxMrz
1) Проверьте данные, которые вы получает после ajax запроса в функции success. Сделайте в начале console.log(data). В консоли отобразятся выведенные значения.
2) Проверьте, что в следствие запроса отправлены корректные данные на сервер. Это можно сделать через консоль разработчика(F12). В Google Chrome вкладка network в консоли.
3) Запустите скрипт возврата данных из базы независимо от ajax запроса, чтобы убедиться, что данные возвращаются корректно. Попробуйте сделать запрос без bindValue напрямую. Уберите все лишнее для теста.
4) Установите обработчики ошибок, чтобы при регистрации неверных данных возвращалось значение в виде Exception или любом другом, которое можно было бы отследить.
5) Олег верно подметил, что $std->fetch(PDO::FETCH_ASSOC) возвращает значение, а сам $std будет объектом PDOStatement. Посмотрите, что вернет метод fetch.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Austin_Powers
@Austin_Powers
Web developer (Symfony, Go, Vue.js)
Вероятно дело в том что на клиент вы возвращаете PDOStatement а не выборку данных. Поправьте код:
$std->fetch(PDO::FETCH_ASSOC);

echo json_encode($std);

на:
echo json_encode($std->fetch(PDO::FETCH_ASSOC));
Ответ написан
pezdatskiy
@pezdatskiy
Предприниматель, по выходным- программист
Во первых, посмотрите что приходит в респонзе.
Во вторых
Самая первая строкa, вы напутали скобки
Должно быть, наверное, $num = intval($_GET["num"]).
Я в подобных случаях, когда возвращаю Json делаю цикл такого вида:

data = JSON.parse(data);
For (key in data) {
Someaction(data[key][someelement]);
}

Indefinite возникает когда вы указываете на несуществующий элемент массива. С тем синтаксисом, которым пользуетесь вы, я не знаком. Но видимо в нем и дело:)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы