我使用ajax
调用从php
脚本中获取一组对象;但是,我无法从中获取嵌套对象。
以下是openings
对象的样子:
Object
2014-01-11: Array[5]
0: Object
appointments: "0"
name: "0"
openings: "1"
route_date: "2014-01-11"
__proto__: Object
1: Object
2: Object
3: Object
4: Object
length: 5
__proto__: Array[0]
2014-01-12: Array[5]
2014-01-13: Array[5]
2014-01-14: Array[5]
2014-01-15: Array[5]
2014-01-16: Array[5]
2014-01-17: Array[5]
2014-01-18: Array[5]
length; undefined appointment.js?ver=3.8:58
begin: 20140111 appointment.js?ver=3.8:59
end: 20140228
我尝试使用console.log("length; "+openings.length);
来获取返回的原始对象的长度,但它返回undefined。
以下是php
函数的代码:
function get_available_times()
{
global $wpdb;
$begin = $_REQUEST['begin'];
$end = $_REQUEST['end'];
/*get time slots*/
$query = "
SELECT DISTINCT routes.route_date, time_slots.name, time_slots.openings, time_slots.appointments
FROM routes
INNER JOIN time_slots ON routes.route_id = time_slots.route_id
WHERE route_date
BETWEEN {$begin}
AND {$end}
ORDER BY route_date, name
";
$time_slots = $wpdb->get_results($query);
/*organize slots into array*/
$openings = array();
foreach($time_slots as $ts)
{
if(empty($openings))
{
$openings[$ts->route_date][$ts->name] = $ts;
}
elseif (array_key_exists($ts->route_date, $openings))
{
$openings[$ts->route_date][$ts->name]=$ts;
}
else
{
$openings[$ts->route_date][$ts->name] = $ts;
}
}
/*return results*/
$result['openings'] = $openings;
$result['time'] = $time_slots;
$result['begin'] = $begin;
$result['end'] = $end;
$result['query'] = $query;
$result['type'] = "success";
$result = json_encode($result);
echo $result;
die();
}
以下是我使用的Javascript代码:
$.ajax({
type: "post",
dataType: "json",
url: ajaxurl,
data:{action: "get_available_times", begin: begin, end:end},
success: function(response){
if(response.type == "success"){
console.log("testing");
var openings = response.openings;
console.dir(openings);
console.log("length; "+openings.length);
console.log("begin: "+response.begin);
console.log("end: "+response.end);
}
}
});
所有这一切的要点是我希望能够遍历每个日期并将值放入HTML中。
答案 0 :(得分:1)
好吧,看起来你得到的对象有5个属性格式化为日期,每个属性都有自己的数组值。
所以,尝试这样的事情:
var refDate = new Date(2014, 01, 14);
$.each(response.openings, function(k, opening){
var parts = k.split('-'), //split the date key
date = new Date(parts[2], (parts[1] - 1), parts[0]); //parse it do a date
// jump to next iteration if dates doesn't match
if(refDate.getTime() !=== date.getTime()) return true;
$.each(opening, function(k2, v){
console.log(v.name);
});
});
您也应该能够将值映射到自定义结果中。这会给你所有的名字:
var result = $.map(response.openings, function(v){
return $.map(v, function(v2){
return { name: v2.name };
});
});
console.log(result);