Laravel:不能遍历json

时间:2017-12-22 20:06:15

标签: arrays json ajax laravel blade

当用户点击图标时,会调用对控制器的ajax调用,并且控制器会返回一些注释。

我的控制器

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);

在控制台日志中,有一个带有注释和渲染html视图的对象数组。但是我不能遍历那个数组。如果我在comments.blade.php中放入一些垃圾代码就会显示出来。但是,如果我尝试 @foreach($comments as $comment) some code @endforeach它根本无法工作,错误消息是未定义变量:评论

2 个答案:

答案 0 :(得分:1)

您需要将变量传递给视图(如果要在刀片文件中使用该变量)

例如说

return view('includes.comments', ['comments' => $comments]);

这样,$ comments变量将在刀片文件中可用,然后您可以使用@foreach

有关观看documentation

的更多信息

答案 1 :(得分: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
如果您想将其用于视图,则可能完全没有必要