簡體   English   中英

通過Ajax將數組從PHP轉換為具有有效JSON格式的JS

[英]Moving array via ajax from PHP to JS with valid JSON format

我從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) );

}

所以我在PHP中添加了json_encode($ myarray),還向javascript中添加了JSON.parse(response)。 現在在我的頁面中,通過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_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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM