doujiu8145 2019-06-23 11:50
浏览 54
已采纳

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

For some reason I'm not seeing an update to the DB even though there isnt any error.

We're using Laravel in class, I tried using the exact same codes from different classmates and somehow it doesn't work for me.

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

update function in the controller file:

    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');           
       }
   }

nothing happens to the database, and no error message.

  • 写回答

1条回答 默认 最新

  • duanjiao3686 2019-06-24 16:33
    关注

    Found the fix thanks to Amirsadjad. This was the $fillable variable in the Todo model:

    protected $fillable=[
        'title',
    ];
    

    fix:

    protected $fillable=[
            'title',
            'status',
        ];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?