2015-10-18 65 views
1

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

$groups数据是这样的:

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

,我使用return $groups->toJson();返回它来查看。

我有2个问题。

  • 如何操作的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 
} 

回答

1

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

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

return $groups->toJson(); 
-1

我做不到弄清楚如何在javascript中操作json,所以我决定在服务器级别做这件事

您的数据完全可以在您的Javascript中处理。

要在JavaScript中操作JSON,首先需要将解析为将JSON字符串解析为一个Javascript对象。为了达到这个目的,在你的JS中使用JSON.parse()方法,像访问任何其他Javascript对象一样访问对象的属性。

例如

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 
} 
+0

但是,那么我将无法使用PHP函数。 – senty

+0

你为什么要把'PHP'与Javascript代码混淆? –

+0

我在问php,如果有另一种使用php函数的方法,在javascript json中,我很想知道。 – senty