Перемещение массива через ajax из PHP в JS с допустимым форматом JSON

Я начал с массива из php, который при вызове через ajax выглядел так:

Array
(
    [0] => {id:"12",from:"09:00:00",to:"15:00:00"}
    [1] => {id:"13",from:"08:00:00",to:"10:00:00"}
    [2] => {id:"12",from:"15:00:00",to:"17:00:00"}
)

PHP-код

public static function getBookedTime($date) {

    $query = "SELECT * FROM booking WHERE cid = ".$_SESSION["cid"]." AND doc_date='".strftime("%Y-%m-%d",strtotime($date))."'";
    $result = self::qry($query);


    while ($line = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

        $obj = "{";
        $obj.= 'id:'.'"'.$line["person_id"].'",';
        $obj.= 'from:'.'"'.$line["from_time"].'",';
        $obj.= 'to:'.'"'.$line["to_time"].'"';
        $obj.= "}";  

        $time_array[] = $obj; 

    }

    print_r( json_encode($time_array) );

}

Поэтому я добавил json_encode($myarray) в PHP, а также добавил JSON.parse(response) в javascript. Теперь на моей странице после вызова через ajax это выглядит так:

var booking1 = {id:"12",from:"09:00:00",to:"15:00:00"},{id:"13",from:"08:00:00",to:"10:00:00"},{id:"12",from:"15:00:00",to:"17:00:00"};

Проблема в том, что я до сих пор не могу получить доступ ни к одному из значений. Это недопустимый формат в js.

Используя JS или php, как я могу заставить booking1 выглядеть как booking2 (или в любом допустимом формате)? Я пробовал array.push и около тысячи вещей, но он просто не сдвинулся с места.

var booking2 = [
    {id:"12",from:"09:00:00",to:"15:00:00"},
    {id:"13",from:"08:00:00",to:"10:00:00"},
    {id:"12",from:"15:00:00",to:"17:00:00"}
  ];

(ответы jQuery в порядке!)

Вам нужно добавить код, который выполняет кодирование, но похоже, что вы кодируете отдельные значения вместо конечного результирующего массива.

jeroen 28.05.2019 14:09

Как указано выше. Вы выполняете json_encoding в цикле при создании массива. Добавьте массив в цикл, затем после цикла json_encode

Andreas 28.05.2019 14:11

Я не понимаю. Должен ли я добавить код php или код ajax к вопросу?

Jennifer Michelle 28.05.2019 14:12

Пхп код. Пожалуйста

Andreas 28.05.2019 14:12

Спасибо - я пишу интерфейсный код, и от этого у меня болит голова.

Jennifer Michelle 28.05.2019 14:15
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Не создавайте свою собственную строку json, используйте вместо этого json_encode, она сделает всю тяжелую работу за вас гораздо более точным способом.

public static function getBookedTime($date) {

    $query = "SELECT * FROM booking WHERE cid = ".$_SESSION["cid"]." AND doc_date='".strftime("%Y-%m-%d",strtotime($date))."'";
    $result = self::qry($query);


    while ($line = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        $time_array[] = ["id" =>$line["person_id"], "from" => $line["from_time"], "to" =>$line["to_time"]];
    }
    $json = json_encode($time_array);
}

$json теперь представляет собой правильно отформатированную строку json, которую вы можете передать в JavaScript.

Оба ответа верны - этому просто нужно «эхо» (мне потребовалась минута, чтобы получить его). У этого есть то преимущество, что вы можете называть переменные, как хотите.

Jennifer Michelle 28.05.2019 14:31

@JenniferMichelle извините, не поняла, что вы хотели повторить json. Но да, вы создаете ассоциативный массив, который получает json_encoded, это означает, что переменные могут быть разными, и вы также можете структурировать массив по-разному. Например, $time_array[$line["person_id"]] = ["id" =>$line["person_id"], "from" => $line["from_time"], "to" =>$line["to_time"]];, что означает, что идентификатор является ключом в массиве, что упрощает поиск определенного подмассива, если именно идентификатор является поисковым запросом.

Andreas 28.05.2019 14:37
Ответ принят как подходящий

На основании вашего редактирования: вам не следует пытаться вручную создать строку json в своем цикле. Вместо этого добавьте нужные значения в массив и добавьте их.

Также обратите внимание, что вам нужно echo и не использовать print_r(), так как это сделает ваш json недействительным.

А если выбрать только нужные поля, то еще проще:

public static function getBookedTime($date) {
    $query = "SELECT person_id, from_time, to_time FROM booking WHERE cid = ".$_SESSION["cid"]." AND doc_date='".strftime("%Y-%m-%d",strtotime($date))."'";

    $result = self::qry($query);

    echo json_encode(mysqli_fetch_all($result, MYSQLI_ASSOC));
}

Примечание: Вы также должны использовать подготовленный оператор со связанными переменными, чтобы избежать инъекции sql. Это может быть невозможно здесь из-за используемых значений, но использовать его везде всегда хорошая идея.

Другие вопросы по теме