我想要做的是使用像->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
}
答案 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
}