Laravel:无法遍历 json 中的对象数组
Laravel: can't iterate through array of objects from json
当用户点击图标时,ajax 调用控制器并调用控制器 returns 一些注释。
我的控制器
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
根本不行,报错信息是Undefined variable: comments
您需要将变量传递给视图(如果您想在 blade 文件中使用该变量)
例如说
return view('includes.comments', ['comments' => $comments]);
这样 $comments 变量将在 blade 文件中可用,然后您可以使用 @foreach
更多浏览量documentation
我相信而不是:
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
]);
这是因为您要渲染 blade 并且需要将 $comments
传递到视图中。所以取决于你真正想要的 return as json line:
'comments' => $comments // this line might be not necessary
如果您想将其用于查看,可能完全没有必要。
当用户点击图标时,ajax 调用控制器并调用控制器 returns 一些注释。
我的控制器
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
根本不行,报错信息是Undefined variable: comments
您需要将变量传递给视图(如果您想在 blade 文件中使用该变量)
例如说
return view('includes.comments', ['comments' => $comments]);
这样 $comments 变量将在 blade 文件中可用,然后您可以使用 @foreach
更多浏览量documentation
我相信而不是:
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
]);
这是因为您要渲染 blade 并且需要将 $comments
传递到视图中。所以取决于你真正想要的 return as json line:
'comments' => $comments // this line might be not necessary
如果您想将其用于查看,可能完全没有必要。