操纵Json(在传递给视图之前)

时间:2015-10-18 04:11:29

标签: javascript php jquery ajax laravel

我想要做的是使用像->diffForHumans()这样的功能。当我试图通过ajax获取数据时,我无法弄清楚如何在javascript中操作json,所以我决定在服务器级别进行操作。

我的$groups数据如下:

Group[1]['created_at']
Group[2]['created_at']
Group[3]['created_at']

我正在使用return $groups->toJson();将其返回查看。

我有两个问题。

  • 如何操作json以便能够再次使用created_at但是使用diffForHumans()函数?所以我可以稍后在javascript中调用Group[i]['created_at'],并为每个调用值获取操作值。

  • 当我返回刀片视图时,我能够使用{{{ (strlen($group->body) > 150) ? substr(($group->body),0,170)."..." : $group->body }}}之类的功能。因为我使用的是ajax,所以我觉得在json传递之前,这个函数在后端级别上也可以更好。

这种方法对吗?对于我想要实现的目标,最好的方法是什么?

编辑我的第一个问题:

我可以将其作为dd($groups[2]['created_at']->diffForHumans()); 但是,我无法继续工作:

foreach($groups as $key=>$group) {
   dd($group); // collection
   dd($key); // 0 
   dd($group[$key]); // null
}

2 个答案:

答案 0 :(得分:1)

您可以使用toJson方法,而不是尝试将对象转换为数组(因此丢失集合和transform方法。

$groups->transform(function($item, $key) {
    $item->created_at = $item->created_at->diffForHumans();
    return $item;
});

return $groups->toJson();

答案 1 :(得分:-1)

  

我无法弄清楚如何在javascript中操作json,所以我决定在服务器级别进行操作

您的数据已准备好在Javascript中处理。

要在javascript中操作JSON,首先需要将解析 JSON字符串转换为Javascript对象。要实现这一点,请在JS中使用JSON.parse()方法,并像访问任何其他Javascript对象一样访问对象的属性。

e.g。

var groups = JSON.parse(JSONgroups); // JSONgroups is the JSON passed to your view.

现在,Javascript中的groups变量可以实现以下功能:

groups[1]['created_at']

关于编辑: $groups变量是集合,因此为了遍历它,您需要将其转换为数组就这样:

$groupsArray = $groups->toArray();

foreach($groupsArray as $key => $group) {
  var_dump($group); 
  var_dump($key); 
  var_dump($group[$key]); // not possible since $key is the key to $group hence would return null
  var_dump($groupsArray[$key]); // use this instead
}