Laravel 5.1 - 从ajax追加Blade

时间:2016-06-21 17:44:48

标签: jquery ajax laravel blade

我想在我的ajax评论列表中附加刀片:

$(document).ready(function(){

    var tablaDatos = $("#comentos");
    var route = "http://localhost:8000/commentList";

    $.get(route, function(res){

        $(res).each(function(key,value){
            tablaDatos.append("<div class='comment'><a class='comment-avatar' href='"+value.user_id+"'><img class='avatar-image-comments' src='{{url($comment->user->profile)}}' width='60' alt=''></a><div class='comment-body'><strong>"+value.user_id+"</strong><h7 class='comment-date'>  -  commentato il "+value.created_at+"</h7><p class='comment-text'>"+value.content+"</p>@if(Auth::check())@if(Auth::user()->id == $comment->user_id || Auth::user()->usertype == 3 )<div class='reply'><div class='inline'><button type='button' value='{{$comment->id}}' class='btn btn-circle btn-dark btn-xs btn-outline' data-toggle='modal' data-target='#myModal'><span>editare</span></button></div><div class='inline'>{!!Form::open(['route'=>['comment.destroy',$comment->id]])!!}<input type='hidden' name='_method' value='DELETE'><button type='submit' class='btn btn-circle btn-dark btn-xs btn-outline'><span>Elimina</span></button>{!!Form::close()!!}</div></div>@endif@endif</div></div>")

        });
    });

});

我需要为用户登录而不是附加刀片功能。但它不起作用,我附上一张照片结果:

enter image description here

4 个答案:

答案 0 :(得分:2)

将刀片语法写入加载的HTML文档永远不会为您提供所需的结果。这是你可以做的事情。

为评论创建模板。

<强>资源/视图/评论-template.blade.php

<div class='comment'>
    <a class='comment-avatar' href='{{ $comment->user->id }}'>
        <img class='avatar-image-comments' src='{{ url($comment->user->profile) }}' width='60' alt=''>
    </a>

    <div class='comment-body'>
        <strong>{{ $comment->user->id }}</strong>
        <h7 class='comment-date'>  -  commentato il {{ $comment->created_at }}</h7>
        <p class='comment-text'>{{ $comment->content }}</p>

        @if(Auth::check())
            @if(Auth::user()->id == $comment->user->id || Auth::user()->usertype == 3 )
                <div class='reply'>
                    <div class='inline'>
                        <button type='button' value='{{ $comment->id }}' class='btn btn-circle btn-dark btn-xs btn-outline' data-toggle='modal' data-target='#myModal'>
                            <span>editare</span>
                        </button>
                    </div>
                    <div class='inline'>{!! Form::open(['route'=>['comment.destroy',$comment->id]]) !!}
                        <input type='hidden' name='_method' value='DELETE'>
                        <button type='submit' class='btn btn-circle btn-dark btn-xs btn-outline'>
                            <span>Elimina</span>
                        </button>
                        {!! Form::close() !!}
                    </div>
                </div>
            @endif
        @endif
    </div>
</div>

在您的控制器中,不是返回JSON对象,而是返回呈现的刀片HTML的JSON数组。

应用/ HTTP /控制器/ CommentController.php

<?php

namespace App\Http\Controllers;

use App\Comment;

class CommentController extends Controller
{
    public function commentList()
    {
        // store the comments list
        $list = [];

        // retrieve comments
        $comments = Comment::all();

        // render each comment and store it
        foreach ($comments as $comment) {
            $html = view('comments-template')
                ->with('comment', $comment)
                ->render();

            $list[] = $html;
        }

        // return a JSON array of the comments list
        return response()->json($list);
    }
}

AJAX调用

$(document).ready(function(){

    var tablaDatos = $("#comentos");
    var route = "http://localhost:8000/commentList";

    $.get(route, function(res){

        $(res).each(function(key,value){
            tablaDatos.append(value);

        });
    });

});

答案 1 :(得分:1)

你不能这样使用。最好的方法是,在blade.php文件中分离模板。然后使用jQuery加载数据并使用DOM操作将它们推送到模板。

我会将html代码放在刀片模板中:

<div class='comment'>
<a class='comment-avatar' id="a_link" href=''>
<img class='avatar-image-comments' src='{{url($comment->user->profile)}}' width='60' alt=''>
</a>
<div class='comment-body'>
<strong>"+value.user_id+"</strong>
<h7 class='comment-date'>  -  commentato il "+value.created_at+"</h7>
<p class='comment-text'>"+value.content+</p>

@if(Auth::check())@if(Auth::user()->id == $comment->user_id || Auth::user()->usertype == 3 )
<div class='reply'><div class='inline'><button type='button' value='{{$comment->id}}' class='btn btn-circle btn-dark btn-xs btn-outline' data-toggle='modal' data-target='#myModal'>
<span>editare</span></button></div><div class='inline'>{!!Form::open(['route'=>['comment.destroy',$comment->id]])!!}<input type='hidden' name='_method' value='DELETE'><button type='submit' class='btn btn-circle btn-dark btn-xs btn-outline'><span>Elimina</span></button>{!!Form::close()!!}</div></div>@endif@endif</div></div>

使用jQuery将值附加到DOM

$(res).each(function(key,value){
    $('#a_link').attr('href', value.id);
});

在当前视图模板中包含.blade.php模板。

答案 2 :(得分:1)

  

所有Blade视图都编译为纯PHP代码并缓存,直到它们为止   已修改#Source

您需要将javascript保存为刀片文件,{{1}}才能编译为php。然后使用 @include 指令包含该脚本文件。

答案 3 :(得分:1)

你正试图把太多的东西混在一起。是时候重新评估了吗?

您没有说明为什么需要通过jQuery $.get()加载。

但你肯定不能在javascript中使用PHP。

为什么不重新设计/commentList处发生的任何事情,以便其控制器可以访问您的$comments,并让控制器采取行动return view('commentlist');

然后您的评论页面模板类似于:

@forelse($comments as $comment)
    <div class='comment'>
        <a class='comment-avatar' href='{{ $comment->user->id }}'>
            <img class='avatar-image-comments' src='{{ url($comment->user->profile) }}' width='60' alt=''>
        </a>
        <div class='comment-body'>
            <strong>{{ $comment->user->id }}</strong>
            <h7 class='comment-date'>  -  commentato il {{ $comment->created_at }}</h7>
            <p class='comment-text'>{{ $comment->content }}</p>
            @if(Auth::check())
              @if(Auth::user()->id == $comment->user_id || Auth::user()->usertype == 3)
                  <div class='reply'>
                    <div class='inline'>
                        <button type='button' value='{{ $comment->id }}' class='btn btn-circle btn-dark btn-xs btn-outline' data-toggle='modal' data-target='#myModal'>
                            <span>editare</span>
                        </button>
                    </div>
                    <div class='inline'>
                        {!! Form::open(['route'=>['comment.destroy', $comment->id]]) !!}
                            <input type='hidden' name='_method' value='DELETE'>
                            <button type='submit' class='btn btn-circle btn-dark btn-xs btn-outline'>
                                <span>Elimina</span>
                            </button>
                        {!!Form::close()!!}
                    </div>
                  </div>
              @endif
            @endif
        </div>
    </div>
@empty
    There are no comments
@endforelse

你得到的就是:

$.get(route, function (data) {
    tablaDatos.append(data);
});

但实际上,我不明白你这样做的理由。您需要解释问题的这一方面,以及您似乎过度设计了问题。

但严重的是,如果你要在你的append()中拥有一些史诗般的单行字符串,那就应该敲响一些不太正确的警告。