【问题标题】:update laravel database by ajax通过ajax更新laravel数据库
【发布时间】:2018-04-13 12:26:17
【问题描述】:

问题

如何使用复选框使用 Ajax 更新我的表的 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 是我的行号

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-&gt;active == '1' ? 'checked' : ''}},以便 根据数据库中的值正确打开和关闭,但从那时起我的值 不会在 DB 中改变,它们会保持当前值并且不会得到 更新了

已修复

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

【问题讨论】:

    标签: javascript php ajax laravel


    【解决方案1】:

    我猜你显示的 html 使用的是 lib,你应该检查 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);
    }
    

    【讨论】:

    • 感谢您的回答,它可以正常工作,但我有 2 个小问题:1 当我的值变为 0 时,我的开关按钮将处于活动状态,这是停用(相反工作)2 当我刷新时无论我的值是 1 还是 0,我的页面都显示为关闭,即 0。
    • 您需要根据 db 中定义的值将它们设置为已检查,因此一旦在重新加载时使用 ajax 设置,请在 dom 中设置一个已检查的属性
    • &lt;input type="checkbox" data-name="active" data-id="{{ $courier-&gt;id }}" {{ $courier-&gt;state ? 'checked' : ''}}&gt;
    • 我刚刚尝试过@if($courier-&gt;active == 1) checked @endif,它按预期显示了我的按钮,但你会遇到另一个问题,even if i switch off my button it gets value of 1,因为我说@if is === 1) **checked**,所以checked 总是检查它。有什么想法吗?
    • 我不确定我明白了,使用$(this).is(":checked") 应该可以正常切换,您使用什么库进行切换?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您可以使用 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')
            }
          });
      });
      

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 2016-06-12
        • 1970-01-01
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        • 2020-04-16
        • 2019-05-31
        • 1970-01-01
        相关资源
        最近更新 更多