Php 通过ajax请求Laravel 5修补程序
我有一个评论与帖子列表,我希望用户能够编辑他们的帖子,如果他们想。在列表中有一个编辑按钮(如果帖子属于登录的用户),单击后会发出ajax请求并返回视图。此视图包含用于编辑注释的表单,并预加载了注释详细信息。在这一点上,一切都很好 现在我遇到了一个不清楚的问题。当我想使用补丁请求提交表单时,它失败了,错误为500。结构如下所示:Php 通过ajax请求Laravel 5修补程序,php,ajax,laravel,patch,Php,Ajax,Laravel,Patch,我有一个评论与帖子列表,我希望用户能够编辑他们的帖子,如果他们想。在列表中有一个编辑按钮(如果帖子属于登录的用户),单击后会发出ajax请求并返回视图。此视图包含用于编辑注释的表单,并预加载了注释详细信息。在这一点上,一切都很好 现在我遇到了一个不清楚的问题。当我想使用补丁请求提交表单时,它失败了,错误为500。结构如下所示: 用户访问/posts/{id}在此视图中列出所有注释 当用户单击“编辑”按钮时 /posts/{id}/comments/{comment\u id}/edit被调用,
- 用户访问
在此视图中列出所有注释/posts/{id}
- 当用户单击“编辑”按钮时
被调用,具有 表格被退回/posts/{id}/comments/{comment\u id}/edit
- 当用户提交此表单时
触发。在这里是失败的Route::patch('/posts/{id}/comments/{comment\u id}/edit',['as'=> 'posts.editComment','使用'=>'PostsController@update“]
{!! Form::model($comment, ['method' => 'PATCH', 'route' => ['posts.editComment', $comment->post_id, $comment->id], 'id' => 'editComment' . $comment->id]) !!}
<div class="comment-edit">
{!! Form::textarea('comment', null, ['class' => 'form-control', 'style' => 'height: 80px;']) !!}
</div>
<div class="comment-edit-buttons text-right">
{!! Form::button(trans('general.cancel'), ['class' => 'btn btn-default btn-sm cancelEditComment', 'data-postId' => $comment->post_id] ) !!}
{!! Form::button(trans('general.edit'), ['class' => 'btn btn-primary btn-sm editComment', 'data-postId' => $comment->post_id, 'data-commentId' => $comment->id] ) !!}
</div>
{!! Form::close() !!}
{!!Form::model($comment,['method'=>'PATCH','route'=>['posts.editcoment',$comment->post\u id,$comment->id],'id'=>'editcoment'.$comment->id])
{!!Form::textarea('comment',null,['class'=>'表单控件','style'=>'高度:80px;'])
{!!Form::button(trans('general.cancel'),['class'=>'btn btn default btn sm canceleditcoment','data postId'=>$comment->post_id])
{!!Form::button(trans('general.edit'),['class'=>'btn btn primary btn sm editcoment','data postId'=>$comment->post_id',data commentId'=>$comment->id])
{!!Form::close()!!}
将其转换为浏览器,如:
<form method="POST" action="http://www.domain.com/posts/29/comments/12/edit" accept-charset="UTF-8" id="editComment12">
<input name="_method" type="hidden" value="PATCH">
<input name="_token" type="hidden" value="generated token value">
<div class="comment-edit">
<textarea class="form-control" style="height: 80px;" name="comment" cols="50" rows="10">nieuwe comment</textarea>
</div>
<div class="comment-edit-buttons text-right">
<button class="btn btn-default btn-sm cancelEditComment" data-postId="29" type="button">Annuleren</button>
<button class="btn btn-primary btn-sm editComment" data-postId="29" data-commentId="12" type="button">Bewerken</button>
</div>
</form>
nieuwe评论
环烯
比沃肯
我真的不知道该去哪里看?是否有一种特殊的方法可以使用ajax发送补丁请求?您的问题与csfr_令牌的加密有关,请在刀片文件中添加以下内容:
$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
然后将以下字段添加到表单中:
<input id="token" type="hidden" value="{{$encrypted_token}}">
最后,确保将原始csfr令牌添加到头中,如下所示:
<script>
.....
var $_token = $('#token').val();
....
$.ajax({
type: 'post',
cache: false,
headers: { 'X-XSRF-TOKEN' : $_token },
url: 'the_url_to_controller_thru_route/' + some_parameters_if_needed,
//contentType: "application/json; charset=utf-8",
//dataType: 'json',
data: {comment_id: 873}, //assuming that you send some data like id of a comment to controller
success: function(data) {
....
</script>
.....
var$_token=$('#token').val();
....
$.ajax({
键入:“post”,
cache:false,
标头:{'X-XSRF-TOKEN':$\U TOKEN},
url:“通过路由发送到控制器的url/”+一些参数(如果需要),
//contentType:“应用程序/json;字符集=utf-8”,
//数据类型:“json”,
数据:{comment_id:873},//假设您向控制器发送一些数据,如注释的id
成功:功能(数据){
....
Ben,如果你发现有什么问题,请编辑我的答案,最好是尽可能准确。我在Laracasts上找到了这个讨论,向下滚动到Lukas post,他讨论了一个未加密的代币问题,这可能是你遇到的问题。谢谢,我会立即查看,并让你知道它是否有帮助。我没有我想你的链接有助于更进一步。但是现在我得到了一个405-方法,这是不允许的。当路由被定义并且控制器方法存在时..?你做了什么更改?你应该恢复到原来的状态,{{Form::open()}显然这是对的,这是正确的,除了我的ajax调用看起来不同之外。但是,如果有人稍后遇到相同的问题,这应该向他们指出解决方案:)干杯!