我试图在post显示刀片模板底部使用ajax和laravel7将注释添加到帖子中,我包括了这个部分以显示现有的注释,并包括一个表单以添加新的注释。
<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';
}
}我显示帖子,填写评论表格:‘这是一个例子’,并点击提交按钮。
执行click函数,我可以在控制台中看到各种消息。
post_id是: 131,agent_id是:1,内容是:这是一个例子: 131:303:21 http://localhost:8000/comments 131:305:12达到点击功能的末尾。
尽管如此,浏览器中什么也不会发生。似乎没有执行ajax请求。有人能帮我修一下这个吗?
发布于 2020-09-01 15:51:17
试一试
$(document).on('button.btn-submit','click',function(e) {
e.preventDefault();
//rest of your code
});发布于 2020-09-01 15:33:19
问题可能是Laravel's CSRF保护。您可以通过查看浏览器开发工具(例如Firefox或铬)的网络面板来确认这一点。如果提交表单创建了一个状态为419的新条目,那么它就是一个CSRF问题。
您需要将CSRF令牌添加到HTML中(通常在meta标记中),并将该令牌与POST请求一起发送。
将此添加到您的<head>中
<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错误日志。
https://stackoverflow.com/questions/63690595
复制相似问题