2015-10-18 36 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