【问题标题】:Laravel: can't iterate through array of objects from jsonLaravel:无法遍历来自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

【问题讨论】:

    标签: arrays json ajax laravel blade


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        • 2015-03-13
        • 1970-01-01
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 2016-08-07
        相关资源
        最近更新 更多