首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 7 $.ajax请求未执行

Laravel 7 $.ajax请求未执行
EN

Stack Overflow用户
提问于 2020-09-01 15:18:47
回答 2查看 92关注 0票数 0

我试图在post显示刀片模板底部使用ajax和laravel7将注释添加到帖子中,我包括了这个部分以显示现有的注释,并包括一个表单以添加新的注释。

代码语言:javascript
复制
<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>

航路

我的路线是

代码语言:javascript
复制
Route::resource('posts','PostsController');
Route::post('/comments','CommentController@store')->name('storeAjax');

我在CommentController中的存储功能是

代码语言:javascript
复制
/**
 * 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';
    }
}

我显示帖子,填写评论表格:‘这是一个例子’,并点击提交按钮。

执行click函数,我可以在控制台中看到各种消息。

post_id是: 131,agent_id是:1,内容是:这是一个例子: 131:303:21 http://localhost:8000/comments 131:305:12达到点击功能的末尾。

尽管如此,浏览器中什么也不会发生。似乎没有执行ajax请求。有人能帮我修一下这个吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-01 15:51:17

试一试

代码语言:javascript
复制
$(document).on('button.btn-submit','click',function(e) {

e.preventDefault();
//rest of your code
});
票数 0
EN

Stack Overflow用户

发布于 2020-09-01 15:33:19

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

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

将此添加到您的<head>

代码语言:javascript
复制
<meta name="csrf-token" content="{{ csrf_token() }}">

将其添加到您的主JS文件(例如bootstrap.js)

代码语言:javascript
复制
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

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

如果没有修复,请查看Laravel错误日志。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63690595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档