使用复选框更新Ajax DB不会在Laravel上更新

时间:2019-06-23 11:50:22

标签: javascript php jquery ajax laravel

由于某种原因,即使没有任何错误,我也看不到数据库的更新。

我们在课堂上使用Laravel,我尝试使用来自不同同学的完全相同的代码,但某种程度上它对我不起作用。

index.blade.php:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>This is your todo list</h1>
<ul>

@foreach($todos as $todo)

@if ($todo->status)
           <input type = 'checkbox' id ="{{$todo->id}}" checked>
       @else
           <input type = 'checkbox' id ="{{$todo->id}}">
       @endif
<li>
    <a href = "{{route('todos.edit',$todo->id)}}">{{$todo->title}} </a> 
</li>
@endforeach
</ul>
@can('manager')

<a href = "{{route('todos.create')}}">Add a new Todo </a>
@endcan

<script>
       $(document).ready(function(){
           $(":checkbox").click(function(event){
               $.ajax({
                   url:  "{{url('todos')}}" + '/' + event.target.id,
                   dataType: 'json',
                   type:  'put',
                   contentType: 'application/json',
                   data: JSON.stringify({'status':event.target.checked, _token:'{{csrf_token()}}'}),
                   processData: false,
                   success: function( data){
                        console.log(JSON.stringify( data ));
                   },
                   error: function(errorThrown ){
                       console.log( errorThrown );
                   }
               });               
           });
       });
   </script>
@endsection

控制器文件中的更新功能:

    public function update(Request $request, $id)
   {
       //only if this todo belongs to user
       $todo = Todo::findOrFail($id);
      //employees are not allowed to change the title 
       if (Gate::denies('manager')) {
           if ($request->has('title'))
                  abort(403,"You are not allowed to edit todos..");
       }   

       //make sure the todo belongs to the logged in user
       if(!$todo->user->id == Auth::id()) return(redirect('todos'));

       //test if title is dirty

       $todo->update($request->except(['_token']));

       if($request->ajax()){
           return Response::json(array('result' => 'success1','status' => $request->status ), 200);
       } else {          
           return redirect('todos');           
       }
   }

数据库没有任何反应,也没有错误消息。

1 个答案:

答案 0 :(得分:0)

感谢Amirsadjad找到了解决方法。 这是Todo模型中的$ fillable变量:

protected $fillable=[
    'title',
];

修复:

protected $fillable=[
        'title',
        'status',
    ];