当前位置: 首页 > 知识库问答 >
问题:

拉威尔7美元。未执行ajax请求

施誉
2023-03-14

我正在尝试使用ajax和laravel7在PostShowBlade模板的底部向帖子添加评论。我包括这一部分以显示现有评论和一个表单以添加新评论

<div class="container comments" #id="commentaires">
    <h2 class="comments-title">Commentaires des adhérents</h2>
    
    @foreach ($comments as $comment)
        <div class="comment-header">
            Posté par
            {!! \App\User::find($comment->agent_id)->firstname; !!}
            {!! \App\User::find($comment->agent_id)->familyname; !!}
            
            le
            <?php \Carbon\Carbon::setLocale('fr');?>
            {{\Carbon\Carbon::parse($comment->created_at)->translatedFormat('l jS F Y')}}
        </div>
        <div class="comment-body">
            {{$comment->content}}
        </div>
    @endforeach
    @auth
        <div class="comment-form">
            <div class="comment-invite">
                Laissez un commentaire
            </div>
            {!! Form::open(['action'=>"CommentController@store",'method'=>'POST']) !!}
                <div class="row post-option-background">
                    <div class="col-md-12" >
                        {{ Form::hidden('post_id', $post->id) }}
                        {{ Form::hidden('agent_id', auth()->user()->id) }}
                         {{ Form::text('content','',['class'=>'form-control'])}}
                    </div>
                </div>
                {{Form::submit('Enregistrer',['class'=>'btn btn-primary btn-submit'])}}

            {!! Form::close() !!}

        </div>
    @endauth
    @guest
        <div class="comment-invite">
            Connectez-vous pour laisser un commentaire
        </div>
    @endguest
</div>

<script type="text/javascript">
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
        }
    });

    $(".btn-submit").click(function(e){
        e.preventDefault();
        var post_id = $("input[name=post_id]").val();
        var agent_id = $("input[name=agent_id]").val();
        var content = $("input[name=content]").val();
        console.log('post_id is : '+post_id+', agent_id is : '+agent_id+' and content is : '+content);
        var url='{{ url('comments') }}'
        console.log(url);
        $.ajax({
            type:'POST',
            url:url,
            data:{post_id:post_id, agent_id:agent_id, content:content},
            dataType: 'json',
            success:function(data){
                 $("#commentaires").append("<div> success </div>");
                 console.log('success');}
        });
        console.log('reaching end of click function');
    });
</script>

路线

我的路线是

Route::resource('posts','PostsController');
Route::post('/comments','CommentController@store')->name('storeAjax');

CommentController中的存储函数是

/**
 * Store a newly created comment in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request){
    if ($request->ajax()){
        $this->validate($request, [
        'content'=>'required',
        'post_id'=>'required',
        'agent_id'=>'required'
        ]);
            return response()->json(['success'=>'Got Simple Ajax Request.']);
    } else{
        return 'request is not ajax';
    }
}

我显示帖子,填写评论表单:“这是一个例子”,然后点击提交按钮。

单击功能被执行,我可以在控制台中看到各种消息

post_id为:131,agent_id为:1,内容为:这是一个示例131:303:21http://localhost:8000/comments131:305:12到达点击功能结束

然而,浏览器中不会发生任何事情。似乎没有执行ajax请求。谁能帮我修一下这个吗?

共有2个答案

屠瑞
2023-03-14

问题可能在于Laravel的CSRF保护。您可以通过查看浏览器开发工具(如Firefox或Chrome)的网络面板来确认这一点。如果提交表单时创建了一个状态为419的新条目,则这是CSRF问题。

您需要将CSRF标记添加到HTML中(通常在meta标记中),并将该标记与POST请求一起发送。

将此添加到您的

<meta name="csrf-token" content="{{ csrf_token() }}">

将其添加到主JS文件(例如,bootstrap.JS

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

资料来源:https://laravel.com/docs/7.x/csrf#csrf-x-csrf-token

如果这无法解决问题,请查看Laravel错误日志。

王涵育
2023-03-14

尝试

$(document).on('button.btn-submit','click',function(e) {

e.preventDefault();
//rest of your code
});
 类似资料:
  • 我目前正在研究构建SaaS构建管理工具。我想知道的是,如果我使用laravel passport作为api令牌,我如何为用户分配角色,例如: SuperAdmin:可以创建项目|可以创建新用户并为用户分配角色。 管理员:可以查看项目。 因为我希望能够根据用户权限隐藏前端上的元素。 例如,如果我使用传统的laravel应用程序,我可以使用委托和刀片指令@role('admin')来显示基于用户权限类

  • 我对拉威尔望远镜的部分有点困惑。 我有一个用户模型和表。 如何为用户分配用户、客户和/或管理员的角色。 我有一个带有vue和laravel api后端的水疗中心。我用https://laravel.com/docs/5.3/passport#consuming-使用javascript创建api 我如何分配哪个用户模型具有哪些作用域? 还是范围与角色不同? 您将如何实现这一点? 提前谢谢!

  • 我对Laravel截断的数据有一个小问题。我将传递给我的后端值,该值可以是表中定义的“百分比”或“金额”,但在表中也可以为null,但每次尝试将其设置为null时,都会出现如下错误: {"discount_currency":["您输入的值无效。"]} 或者当我从处理请求中删除enum时,它会说 所以我传递数据抛出API从我的Vue,这个婴儿车的请求看起来像: 所以如果我删除...我有第二个错误。

  • 我正在构建一个Laravel web应用程序,其中我需要一个动态图像库,我构建了一个后端管理面板,可以在其中添加图像,我成功地将图像添加并保存到数据库中,但我无法编辑或删除它们。 错误是: UrlGenerationException中的ErrorException。php第17行:缺少[Route:galleries.update][URI:backend/galleries/{gallery}

  • 我试图设置一个属性,使用@产量和@部分,但如何?我试图用 和 但是它返回id= 我知道我可以用默认的id来管理它,但我不喜欢这种方式,如果我需要使用自定义属性呢?

  • 我正在使用这个库:https://github.com/davibennun/laravel-push-notification 用于发送推送通知。我使用了示例代码,我的iPhone上的推送消息正在工作。 现在我只想向多个设备发送一条消息。文件上说我需要使用: 但是我想从devicecollection上的数据库中得到一个foreach循环。我该怎么和拉威尔一起做?非常感谢!