【问题标题】:Laravel - Toggle value in database with checkbox and ajaxLaravel - 使用复选框和 ajax 切换数据库中的值
【发布时间】:2017-03-05 22:29:07
【问题描述】:

我想通过 jquery 和 ajax 使用复选框来切换表中的布尔值。

所以每当用户勾选复选框时,它应该切换表中的值。

到目前为止,我想出了这个,但我需要帮助:

$(document).ready(function(){
        $("input:checkbox").change(function() { 
            var isChecked = $("input:checkbox").is(":checked") ? 1:0; 
            $.ajax({
                type:'POST',
                url:'/activation',
                headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
                data: $('.checkbox').serialize(),
                    success:function(data){

                    }
            });
        });
    });

【问题讨论】:

  • 究竟是什么不起作用?到目前为止,您只展示了如何使用 ajax...
  • true...它根本不起作用,我不知道在我的控制器方法中放入什么如果该复选框为 0 它应该更改 DB 表中的值,反之亦然
  • Welp,如果它是 0(或 1),那么 Table::where('someField', 'someValue')->update(['someField' => 'someValue'])。看看their docs,如果您有具体问题,我和这里的其他人可能会非常乐意提供帮助。
  • 好的,我会尽量把问题写得更好
  • @Andrew 我做到了....也许你可以告诉我是否可以做得更好

标签: php jquery ajax checkbox


【解决方案1】:

@andre的回答是正确的但是

    if($user->active == 1){
        $user->active = 0;
    } else {
        $user->active = 1;
    }

这部分可以通过一行

完成
$user->active = !$user->active;

【讨论】:

    【解决方案2】:

    我唯一要修改的就是返回对 ajax 调用的回答,让它知道发生了什么。

    public function activation(Request $request)
    {
    
        $user = User::findOrFail($request->user_id);
    
        if($user->active == 1){
            $user->active = 0;
        } else {
            $user->active = 1;
        }
    
        return response()->json([
          'data' => [
            'success' => $user->save(),
          ]
        ]);
    }
    

    And now in the front-end part:
    
    $(document).ready(function(){
      $("input:checkbox").change(function() {
        var user_id = $(this).closest('tr').attr('id');
    
        $.ajax({
                type:'POST',
                url:'/activation',
                headers: {'X-CSRF-TOKEN': '{{ csrf_token() }}' },
                data: { "user_id" : user_id },
                success: function(data){
                  if(data.data.success){
                    //do something
                  }
                }
            });
        });
    });
    

    jQuery Ajax documentation

    【讨论】:

    • 我有一个准备好的成功消息,我该如何使用它......我已经把它放在我的答案中
    • 抱歉,具体是什么情况?
    • 这部分是我在你的回答中需要的 if(data.success){ //do something }
    • 不,绝对不是。这就是ajax的重点,无需重新加载。做一个console.log(data) 看看里面有什么。学会调试,这是一个很好的技能。
    • 是的,我现在明白了....但是如何为用户提供一些反馈...放在这里的内容:if(data.success){ //do something }
    【解决方案3】:

    在模型中创建方法

    function toggleActive ()
    {
    
      $this->active!=(int)$this->active;
      return $this;
    }
    
    

    在控制器中

    
    $model->toggleActive()->save();
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 2021-10-10
      • 2013-11-07
      相关资源
      最近更新 更多