通过ajax将数组从PHP转换为具有有效JSON格式的JS

时间:2019-05-28 12:05:41

标签: javascript php arrays json ajax

我从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的答案还可以!)

2 个答案:

答案 0 :(得分:4)

根据您的编辑:您不应尝试在循环中手动构建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注入。由于使用了这些值,在这里可能无法实现,但是在任何地方使用它总是一个好主意。

答案 1 :(得分:2)

不要使用json_encode创建自己的json字符串,它将以更加精确的方式为您完成所有艰苦的工作。

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。