我在ajax调用中返回一个多维数组,我需要获取所有值
比索
public function ExampleAction()
{
$arr = array(array("title" => 'Example Title 1',"description" => "Morbi leo risus, porta ac consectetur ac","datetime"=>new \DateTime("tomorrow")),
array("title" => 'Example Title 2',"description" => "Morbi leo risus, porta ac consectetur ac","datetime"=>new \DateTime("today"))
);
return new JsonResponse(array(
'data' =>$arr,
'success' => true), 200);
}
对于简单数组,我在Javascript中得到这样的值:
$.ajax({
type: 'POST',
url: Routing.generate('example'),
data: {},
dataType: 'json',
success: function(response) {
for (var key in response.data) {
title= response.data[key];
description= response.data[key];
datetime= response.data[key];
},
}
})
但我不知道如何为多维数组获取它。我尝试了几种方法而且没有成功。
我提前感谢您的帮助。
已编辑--------------------------初始问题------------------ ------------
我需要获得这样一个对象:
$.ajax({
type: 'POST',
url: Routing.generate('example'),
data: {},
dataType: 'json',
success: function(response) {
$('#calendar').eCalendar({
...
events: [{
title: 'Example Title 1',
description: 'Description 1. Without link',
datetime: new Date(2016, 11, 30)
},
{
title: 'Example Title 2',
description: 'Description 2.',
datetime: new Date(2016, 10, 23),
}]
});
}
})
所以我提出以下内容:
$.ajax({
type: 'POST',
url: Routing.generate('example'),
data: {},
dataType: 'json',
success: function(response) {
$('#calendar').eCalendar({
....
events: response.data,
....
});
}
})
但这给了我以下错误:
TypeError: d.getDate is not a function
if (d.getDate() == day && d.getMonth() == dMonth && d.getFullYear() == dYear) {...
我想这是因为在php中获取日期的方式与javascript中指示的结果不同。所以我想通过ajax调用获取数据并手动分配它,但我将它分配给对象,所以我做错了。我该如何解决这个问题?
答案 0 :(得分:1)
实际上你没有多维数组。您有一组具有第二级对象的对象。但我明白为什么你会这么认为。试试这个
success: function(response) {
for (var i = 0; i < response.data.length; i = i + 1) {
title = response.data[i].title;
description = response.data[i].description;
datetime = response.data[i].datetime;
date = datetime.date
timezone_type = datetime.timezone_type
timezone = datetime.timezone
console.log('timezone=' + timezone)
},
一旦你看到它,日期时间对象就变得比较棘手,但并不是很难。
编辑:现在我知道你正在考虑将数据传递到calandar插件我可以看到你的问题与日期是JSON格式的字符串有关但是d.getDate()错误告诉我们它是期待日期类型。您可以使用new Date(stringval)
success: function(response) {
for (var i = 0; i < response.data.length; i = i + 1) {
var myDate = new Date(response.data[i].datetime.date)
response.data[i].date = myDate
}
$('#calendar').eCalendar({
...
events: response.data
},
此代码遍历数据数组并从datetime.date值生成javascript日期,然后用该日期替换日期。
但是,此代码不使用您的时区详细信息 - 您需要查看插件站点文档以获取有关该点的帮助。见https://github.com/themouette/jquery-week-calendar/wiki
编辑:关于日期格式 - 如果你想使用new Date()
而不砍掉字符串,你需要使用规定的日期格式。您的格式为:
"date":"2016-12-30 00:00:00.000000"
我认为这可能是一种无效的格式。我相信日期和时间的正确版本将是
&#39;&#34;日期&#34;:&#34; 2016-12-30T00:00:00.000&#34;&#39;
注意时间之前的T和毫秒只是3位数。我相信有一个javascript日期格式,包括您可能需要的时区。询问关于该特定主题的另一个问题会比在此处添加更好的结果。
答案 1 :(得分:0)
此处使用对象。
将您希望返回的所有数据放在一个对象中,并且在传递数据时不会出现问题。当你找回它时,你可以操纵你的数据。
返回新的JsonResponse({ &#39;数据&#39;:$ arr, &#39;成功&#39; :真正} ,200);