Адресные json-данные, отправленные из PHP в Ajax

avatar
nucky
8 апреля 2018 в 12:28
25
1
0

Я пытаюсь передать данные в формате 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]); мне ничего не показывает. И это сбивает с толку, поскольку похоже, что это работает для других в похожих сообщениях.

Если у вас есть идеи, пожалуйста, дайте мне знать. Заранее спасибо.

Источник
Peter
8 апреля 2018 в 12:39
0

Обратная косая черта не имеет значения. PHP по умолчанию экранирует косые черты, но вы можете отключить это с помощью флага JSON_UNESCAPED_SLASHES, если хотите. Однако ваш ответ недействителен в формате JSON. Это несколько объединенных документов JSON. Вызовите json_encode только один раз.

nucky
8 апреля 2018 в 14:47
0

Питер, можешь объяснить, что ты имеешь в виду под вызовом json_encode только один раз? В пхп делаю так. Но, возможно, я неправильно тебя понимаю.

Peter
8 апреля 2018 в 15:20
1

вы вызываете его один раз в строке. Вместо этого используйте цикл для создания некоторой структуры данных (например, массива, но это действительно зависит от вас), а затем вызовите json_encode один раз после цикла.

nucky
8 апреля 2018 в 15:43
0

Питер, вот так. Получил желаемые результаты. '$data = $row' и печать расположена вне цикла. Теперь я могу обращаться с данными[x][y] так, как хотел. Если вы создадите ответ на этот вопрос, я хотел бы отметить это как правильный ответ.

Ответы (1)

avatar
Niels Lucas
8 апреля 2018 в 12:55
0

вы пробовали data[0][1]? Это ни на чем не основано. Чисто на догадках.

nucky
8 апреля 2018 в 14:48
0

Я сделал. С json в качестве типа данных нет ответа, без него он не определен.