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