laravel切换按钮不将值发送回db ajax

时间:2018-09-03 05:07:22

标签: javascript jquery ajax database laravel

我正在使用Laravel和ajax发送更新数据库的请求。当“ is_active”的值为1时,切换复选框将更新db中“ is_active”的值,但是当“ is_active”的值为1时,切换复选框将更新值“ db中的is_active”。除此之外,我很难根据ID来检索'is_active'的值。还有为什么我的“取消”按钮不起作用?我错过了什么吗?

这是我的html的样子:-

@foreach($system_functions as $function)
     @if($function->group_id == 1)
       <input type="hidden" id="id" value="{{$function->id}}" />
          <tr>
              <td>{!! $function->name !!}</td>
              <td><input class="toggle_status" type="checkbox" @if($function->is_active) checked @endif id="is_active" name="is_active" data-on="启用" data-off="禁用" value="{{$function->id}}" data-toggle="toggle"></td>
          </tr>
    @endif
@endforeach

这是我html文件中的js:-

@section('script')
<script type="text/javascript">
    $(document).ready(function() {
        $('.toggle_status').change(function (e) {
            e.preventDefault();
            var is_active = 0;
            var id = $(this).attr('value');


            if ($(this).is(':checked')) {
                is_active = 1;
            }

            $.ajax({
                type: 'POST',
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url: '/admin/system-functions',
                data: {
                    is_active: is_active,
                    id:  id
                },
                success: function (data) {

                    $.confirm({
                        title:'edit?',
                        content:'edit?',
                        buttons:{
                            confirm: {
                                text: 'edit',
                                btnClass: 'btn-danger',
                                action: function () {
                                    $.alert(data['success']);
                                }
                            },
                            cancel: {
                                text: 'cancel',
                                btnClass: 'btn-default'
                            }
                        }
                    });
                }
            });
        });
    });
</script>
@endsection

这是我的控制器文件

public function update(Request $request)
{
    $id = Input::get('id');
    $function=SystemFunction::where('id',$id)->first();
    if($request->get('is_active')==='on'){
        $is_active=1;
    } else{
        $is_active=0;
    }
    $function->update([
        'is_active' => $is_active
    ]);
    return response()->json(['success' => '成功修改状态']);
}

1 个答案:

答案 0 :(得分:0)

首先,我建议您Laravel Collective生成表单输入。

您有几个错误,很可能只解决了第一点就可以解决问题,但是您应该检查所有这些错误。

控制器内的期望值错误:
在您的jQuery代码中,您分配了is_active的值1,但是在您的控制器中,您正在检查它是否为on。只需检查请求输入,如果它为0,它将被评估为false。

if($request->get('is_active')){
    $is_active=1;
} else{
    $is_active=0;
}

或者只是:

$is_active = $request->get('is_active');

重复的输入ID:

<input type="hidden" id="id" value="{{$function->id}}" />
<input class="toggle_status" type="checkbox" @if($function->is_active) checked @endif id="is_active" name="is_active" data-on="启用" data-off="禁用" value="{{$function->id}}" data-toggle="toggle">

这些输入位于foreach循环内,因此我假设其中有几个。如果正确,则您不能两次使用相同的ID。如果需要它们,则将循环索引值附加到它们上,如果不需要,只需删除它们。

id="id{{ $loop->index }}"
id="is_active{{ $loop->index }}"

重复的名称:
与上述相同,您可能有多个name="is_active"。那不是无效的HTML,但是当您使用PHP时,应该使用数组名称:name="is_active[]"