Laravel:无法遍历来自json的对象数组
Posted
技术标签:
【中文标题】Laravel:无法遍历来自json的对象数组【英文标题】:Laravel: can't iterate through array of objects from json 【发布时间】:2018-06-05 10:06:35 【问题描述】:当用户单击图标时,将调用对控制器的 ajax 调用,并且控制器会返回一些 cmets。
我的控制器
public function read($id)
$comments = Comment::where('post_id', $id)->get();
return response()->json([
'html' => view('includes.comments')->render(),
'comments' => $comments
]);
Ajax 成功函数
var comments_box = comments_container.find('.comments-box');
comments_box.html(data.html);
console.log(data);
在控制台日志中有一个带有 cmets 和渲染 html 视图的对象数组。但我无法遍历该数组。如果我在 cmets.blade.php 中放入一些垃圾代码,它就会显示出来。但如果我尝试
@foreach($comments as $comment) some code @endforeach
根本不行,错误信息是 Undefined variable: cmets
【问题讨论】:
【参考方案1】:我相信而不是:
return response()->json([
'html' => view('includes.comments')->render(),
'comments' => $comments
]);
你应该使用:
return response()->json([
'html' => view('includes.comments', ['comments' => $comments])->render(),
'comments' => $comments // this line might be not necessary
]);
这是因为您要渲染刀片并且需要将$comments
传递到视图中。所以取决于你真正想要作为 json 行返回的内容:
'comments' => $comments // this line might be not necessary
如果您想将其用于查看,可能完全没有必要。
【讨论】:
【参考方案2】:您需要将变量传递给视图(如果您想在刀片文件中使用该变量)
例如说
return view('includes.comments', ['comments' => $comments]);
这样 $cmets 变量将在刀片文件中可用,然后您可以使用 @foreach
更多关于观点documentation
【讨论】:
以上是关于Laravel:无法遍历来自json的对象数组的主要内容,如果未能解决你的问题,请参考以下文章