当ajax成功调用控制器方法laravel时,数据库未更新

时间:2018-09-03 01:27:34

标签: javascript php jquery ajax laravel

从控制台输出中,可以看到ajax调用的控制器方法已显示成功消息,但是我不知道为什么db中的值没有根据该值而改变。

这是我的html代码

@foreach($system_functions as $function)
    <input type="hidden" id="id" value="{{$function->id}}" />
    @if($function->group_id == 1)
        <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="on" data-toggle="toggle"></td>
        </tr>
    @endif
@endforeach

同一文件中的我的ajax

@section('script')
<script type="text/javascript">
    $(document).ready(function() {
        $('.toggle_status').change(function (e) {
            e.preventDefault();
            var is_active = 0
            if ($(this).is(':checked')) {
                is_active = 1;
            }
            $.ajax({
                type: 'POST',
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                },
                url: '/admin/system-functions',
                async: true,
                data: {
                    is_active: is_active,
                    id: {{ $function->id }}
                },
                success: function (data) {
                    $.confirm({
                        title:'edit?',
                        content:'confirm to edit?',
                        buttons:{
                            confirm: {
                                text: 'edit',
                                btnClass: 'btn-danger',
                                action: function () {

                                }
                            },
                            cancel: {
                                text: 'cancel',
                                btnClass: 'btn-default',
                                action: function () {

                                }
                            }
                        }
                    });
                }
            });
        });
    });
</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' => 'successful']);
}

这是我的路线

Route::post('/system-functions', 'SystemFunctionController@update');

这是我的模态班

class SystemFunction extends Model
{
    protected $fillable=['name','group_id','is_active'];

    static function isFunctionActive($function_name){
        $function=SystemFunction::whereName($function_name)->first();
        if(!$function){
            return false;
        }
        return $function->is_active==true;
    }
}

2 个答案:

答案 0 :(得分:0)

尝试:

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

希望能有所帮助

答案 1 :(得分:0)

尝试此操作,如果数据库未更新,则可以通过错误消息对其进行跟踪:

 try {
        $id = Input::get('id');
        $is_active = empty(Input::get('is_active')) ? 0 : 1;
        $function = SystemFunction::findOrFail($id)->update(['is_active' => $is_active]);

        if ($function) {
            return response()->json(['success' => 'successful'], 200);
        } 
        $error = ['errors' => ['message' => 'no data']];

        return response()->json($error, 204);

    } catch (Exceptoin $e) {
        $error = ['errors' => ['message' => $e->getMessage()]];

        return response()->json($error, 200);
    }