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的对象数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP / Laravel - 更新 JSON 对象的值

无法在数据库 Laravel 中存储 Json 对象

无法在laravel中将数组数组转换为没有索引的对象数组

迭代数据时,Laravel 无法将 stdClass 类型的对象用作 Job 的数组 [重复]

如何解析来自 URL 的 JSONS 数组的对象?

在 Ajax 成功上循环遍历对象内的数组内的对象