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

Array ( [0] ={amp}gt; {id:"12",from:"09:00:00",to:"15:00:00"} [1] ={amp}gt; {id:"13",from:"08:00:00",to:"10:00:00"} [2] ={amp}gt; {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 ответы в порядке!)

Основываясь на ваших изменениях: вы не должны пытаться создать строку 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. Это может быть невозможно из-за используемых значений, но всегда полезно использовать его везде.

Не создавайте свою собственную строку 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" ={amp}gt;$line["person_id"], "from" ={amp}gt; $line["from_time"], "to" ={amp}gt;$line["to_time"]]; } $json = json_encode($time_array); } 

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