我正在使用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' => '成功修改状态']);
}
答案 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[]"
。