Перемещение массива через ajax из PHP в JS с допустимым форматом JSON - PullRequest
0 голосов
/ 28 мая 2019

Я начал с массива из 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 (ответ) в 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 в порядке!)

Ответы [ 2 ]

4 голосов
/ 28 мая 2019

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

2 голосов
/ 28 мая 2019

Не создавайте свою собственную строку 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.

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