如何使用jquery在ajax请求中获取Multidimensional Array中的值

时间:2016-11-30 18:26:26

标签: php jquery ajax

我在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调用获取数据并手动分配它,但我将它分配给对象,所以我做错了。我该如何解决这个问题?

2 个答案:

答案 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);