Laravel将ID从获取的数据传递到AJAX

时间:2016-04-13 04:41:56

标签: php ajax laravel

我迷失了做这件事的方法。所以基本上我得到了这样的多个评论形式:

@foreach($lists as $list)
    //some views 

    <form class="commentForm">
        <input type="text" class="commentBox" name="comment" />
        <input type="submit" class="submitBtn" value="Comment" />
    </form>
@endforeach

我想实现AJAX,以便每次用户评论某些内容时,页面都不会重新加载。我目前提交评论的路线是:

Route::post('list/{listID}/comment', 'ListController@comment');

我不知道如何将视图中的ID传递给AJAX,然后再传回控制器。我尝试了显而易见的一个,在AJAX网址中使用'list/{{ $list->id }}/comment',这是行不通的。还尝试了一些其他的东西,但基本上都是徒劳的。

提前谢谢!

编辑:我的AJAX代码:

$(document).ready(function(){
$(document).on("submit", '.commentForm', function(e){
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
        }
    });

    var data = $(this).serialize();
    var me= this;

    $.ajax({
        type: 'POST',
        url: 'posts/{{ $auction->id }}/comment',
        data: data,
        datatype: 'JSON',
        success:function(data){
            console.log(data);
        },
        error:function(data){
            console.log(data);
        }
    });

    return false;
})
});

我现在只是控制。记录输出,看它是否有效。

4 个答案:

答案 0 :(得分:1)

我建议使用jQuery的.data()功能,所以在foreach循环中你可以这样做:

<form class="commentForm" data-id="{{$list->id}}">
    <input type="text" class="commentBox" name="comment" />
    <input type="submit" class="submitBtn" value="Comment" />
</form>

然后一个听众统治他们:

$(document).on("submit", '.commentForm', function(e){
    e.preventDefault();
     var comment_id = $(this).data('id');
     console.log('comment id = ',comment_id);

    $.ajax({
        type: 'POST',
        url: 'posts/' + comment_id + '/comment',
        //etc...
});

答案 1 :(得分:1)

在laravel中,他们使用刀片模板。我不知道你把你​​的ajax代码放在哪里,但这些括号:{{}},{!! !!}只有在使用扩展名.blade.php时才会被视为模板。

在laravel中你可以使用资源/视图下的.php作为html模板,但是{{}}内部的{。},{!! !!},其他刀片语法将被视为普通文本,而不是再次被解释。如果你需要,通常我会让布局像这样:

<html>
    <head>
        @yield("sytles")
        @yield("additionalstyles")
        @yield("includestyles")
        ................//as many as you need
    </head>
    <body>
        <div>@yield("content")</div>//content here
        @yield("scripts")
        @yield("additionalscripts")
        @yield("includescripts")
        ................//as many as you need
    </body>
</html>

然后在视图中,当我需要发出ajax请求时,我会将它包含在@section(“script”)@stop或者尚未使用的产量中,所以例如视图部分在使用此模板后,您的代码可能会像这样:

@extends("layout")

@section("content")
@foreach($lists as $list)
    //some views 

    <form class="commentForm">
        <input type="text" class="commentBox" name="comment" />
        <input type="submit" class="submitBtn" value="Comment" />
    </form>
@endforeach
@stop

@section("additionalscript")
<script>
    $(document).ready(function(){
    $(document).on("submit", '.commentForm', function(e){
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
            }
        });

        var data = $(this).serialize();
        var me= this;

        $.ajax({    
            type: 'POST',
            url: 'posts/{{ $auction->id }}/comment',
            data: data,
            datatype: 'JSON',
            success:function(data){
                console.log(data);
            },
            error:function(data){
                console.log(data);
            }
        });

        return false;
    })
    });
</script>
@stop

这样,你的

url: 'posts/{{ $auction->id }}/comment',

将会像

一样呈现
url: 'posts/hansishandsome/comment',

希望这个帮助

答案 2 :(得分:0)

您可以执行以下步骤:

Listid中添加一个值为form的隐藏字段,如:

<input type="hidden" id="listId" value="{{$list->id}}" />

然后你可以在ajax调用中使用它,如:

$listId = $("#listId").val();

答案 3 :(得分:0)

以下是您可以使用的方法

  1. 创建隐藏输入
  2. var listid = $('#listid').val();
    

    并通过JQuery读取值

    <script>
       var list = {
          id : {{ $list->id }} //you can also add other variables in the object
         }
    </script>
    
    1. 创建一个JSON对象并在
    2. 中阅读
      $.post('list/' + list.id + '/comment', data);
      

      在你的js文件中使用列表对象

      注意:列表对象必须在运行脚本之前初始化

      {{1}}