Я пытаюсь передать данные в формате json из моего PHP- и MySQL-скрипта обратно на страницу с ajax-скриптом. Данные будут состоять из нескольких строк, то есть row1, row2 и так далее. Я передаю данные обратно на страницу и хочу обратиться к первой строке/строке, прежде чем перейти ко второй и так далее. Но я даже не могу обратиться ни к одному. Мало того, что URL-адреса выглядят «странно» (вместо косой черты / я вижу обратную косую черту и косую черту /), но я даже не могу получить ни одного результата, если я обращаюсь к данным [1] или что-то еще. Раньше я безуспешно пробовал несколько решений из нескольких сообщений здесь.
Вот часть PHP, которая работает нормально:
$data = array();
$query = "SELECT * FROM `episode_elements` WHERE eid = 1 ORDER BY rank";
$result = mysqli_query($con, $query);
$data = array();
while($row = mysqli_fetch_array($result))
{
//echo $row['audio'];
//printf ("%s (%s)\n",$row[0],$row[1],$row[2],$row[3],$row[4]);
$data[0] = $row['audio'];
$data[1] = $row['image'];
$data[2] = $row['text'];
$data[3] = $row['rank'];
print json_encode($data);
}
Просто получение результата от этого скрипта показывает отличный результат:
["http:\/\/www.nasa.gov\/mp3\/581097main_STS-1_Dust-it-Off.mp3","https:\/\/cdn.pixabay.com\/photo\/2011\/12\/14\/12\/11\/astronaut-11080_960_720.jpg","NASA","1"]
["http:\/\/www.mostfreebies.com\/PatrioticNostalgicMusic\/music\/USAFB_TheStarSpangledBanner.mp3","https:\/\/cdn.pixabay.com\/photo\/2013\/01\/16\/05\/08\/flag-75047_960_720.jpg","Star Spangled Banner","2"]
Но там уже видны обратные косые черты. Но затем, когда я передаю данные обратно в свой скрипт, я не могу получить к ним доступ. Я не вижу данные[0] или данные[1][1].
Как это исправить? Честно говоря, JS и Ajax сводят меня с ума.
function load_data(limit, start)
{
$.ajax({
url:"episode_content_load.php",
method:"POST",
dataType: 'json',
data:{limit:limit, start:start},
cache:false,
success:function(data)
{
$('#load_data').append(data);
alert(data[1]);
}
});
}
Хотя $('#load_data').append(data); работает, если я не добавляю строку типа данных: JSON, alert(data[1]); мне ничего не показывает. И это сбивает с толку, поскольку похоже, что это работает для других в похожих сообщениях.
Если у вас есть идеи, пожалуйста, дайте мне знать. Заранее спасибо.
Обратная косая черта не имеет значения. PHP по умолчанию экранирует косые черты, но вы можете отключить это с помощью флага JSON_UNESCAPED_SLASHES, если хотите. Однако ваш ответ недействителен в формате JSON. Это несколько объединенных документов JSON. Вызовите json_encode только один раз.
Питер, можешь объяснить, что ты имеешь в виду под вызовом json_encode только один раз? В пхп делаю так. Но, возможно, я неправильно тебя понимаю.
вы вызываете его один раз в строке. Вместо этого используйте цикл для создания некоторой структуры данных (например, массива, но это действительно зависит от вас), а затем вызовите json_encode один раз после цикла.
Питер, вот так. Получил желаемые результаты. '$data = $row' и печать расположена вне цикла. Теперь я могу обращаться с данными[x][y] так, как хотел. Если вы создадите ответ на этот вопрос, я хотел бы отметить это как правильный ответ.