通过ajax更新laravel数据库

时间:2018-04-13 02:52:31

标签: javascript php ajax laravel

问题

如何使用复选框更新我的表格only 1 column

解释

我想使用复选框并更新我的active列,其值为10。如果选中的值为1,则为0

html

<label class="switch">
  <input type="checkbox" data-name="active" data-id="{{ $courier->id }}">
  <span class="slider round"></span>
</label>

data-name是我的专栏名称

data-id是我的行ID

controller function

public function Updatecourierstatus(Request $request) {
        try {
            $id = $request->input('id');
            $field = $request->input('name');

            $courier = Courier::findOrFail($id);
            $courier->{$field} = //must get 1 or 0 here;
            $courier->save();
        } catch (Exception $e) {
            return response($e->getMessage(), 400);
        }
        return response('', 200);
    }

route

Route::post('/Updatecourierstatus', 'CourierController@Updatecourierstatus')->name('Updatecourierstatus');
});

JavaScript

不确定如何处理此部分!

更新

我的最新代码:

script

<script>
    $(function (){
        $.ajaxSetup({
          headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $('label.switch input[type="checkbox"]').on('click', function (event) {
          $.post("{{route('Updatecourierstatus')}}", { 
            id: $(this).data("id"),
            name: $(this).data("name"),
            state: $(this).is(":checked") ? 0 : 1 // toggles
          }).done(function(data) {
              console.log(data)
          });
        });
    });
</script>

controller

public function Updatecourierstatus(Request $request) {
            try {
                $id = $request->input('id');
                $field = $request->input('name');
                $state = $request->input('state');

                $courier = Courier::findOrFail($id);
                $courier->{$field} = (int) $state;
                $courier->save();
            } catch (Exception $e) {
               return response($e->getMessage(), 400);
            }
            return response('', 200);
    }

html

<label class="switch">
  <input class="status" type="checkbox" data-name="active" data-id="{{ $courier->id }}" {{ $courier->active == '1' ? 'checked' : ''}}>
  <span class="slider round"></span>
</label>

问题

  1. 我的开关按钮未按预期工作,值为1并关闭 对于值0,总是关闭。
  2. 我添加{{ $courier->active == '1' ? 'checked' : ''}}以便 根据数据库中的值来开启和关闭,但从那以后我的值 不会改变数据库,他们保持现有的价值,而不是得到 更新
  3. 固定

    问题是state: $(this).is(":checked") ? 0 : 1 as&#34; What are the PHP operators “?” and “:” called and what do they do?&#34;解释说我必须使用state: $(this).is(":checked") ? 1 : 0

3 个答案:

答案 0 :(得分:3)

我猜测你的节目正在使用lib的html,你应该检查lib的详细信息,它们可能会提供你可以使用的事件。

如果没有,你可以像下面这样做,只需发送一个ajax请求,当你切换值时,从查看代码name看起来任意设置,如果有人发送,你可能不应该这样做一个喜怒无常的专栏名称。

好的,所以你可以点击复选框来执行ajax请求,并从数据属性中获取idname

<script>
    $(function (){
        $('label.switch input[type="checkbox"]').on('click', function (event) {
          $.post("/Updatecourierstatus", { 
            id: $(this).data("id"),
            name: $(this).data("name"),
            state: $(this).is(":checked") ? 0 : 1 // toggles
          }).done(function(data) {
              console.log(data)
          });
        });
    });
</script>

然后在您的控制器中,只需添加该值:

public function Updatecourierstatus(Request $request) {
    try {
        $id = $request->input('id');
        $field = $request->input('name');
        $state = $request->input('state');

        $courier = Courier::findOrFail($id);
        $courier->{$field} = (int) $state;
        $courier->save();
    } catch (Exception $e) {
       return response($e->getMessage(), 400);
    }
    return response('', 200);
}

答案 1 :(得分:1)

如果使用ajax数据参数(如id和name do)选中复选框,则应提交变量显示。然后,您可以在控制器中接收并保存它。

答案 2 :(得分:1)

您可以使用jquery轻松完成此操作:

$('input.checkbox').on('change', function(e) {
    $.ajax({
      type: "POST",
      url: url,
      data: {value: $(this).val(), id: $(this).data('id'), name: $(this).data('name')},
      success: function() {
        console.log('submitted')
      }
    });
});