我正在尝试使用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请求。谁能帮我修一下这个吗?
问题可能在于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错误日志。
尝试
$(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循环。我该怎么和拉威尔一起做?非常感谢!