#jquery #ajax #laravel
Вопрос:
Я пытаюсь обновить столбец состояния , используя следующий код :
Мой Контроллер :
function getdata(Request $request)
{
if(request()->ajax())
{
return datatables()->of(Casting::latest()->get())
->addColumn('action', function($data){
$button = '<table><tr><td>';
$button .= '<button type="button" name="edit" id="'.$data->id.'" class="edit btn btn-primary btn-sm">Modifier</button>';
$button .= '</td><td>';
$button .= ' <label class="switch" >';
$button .= ' <input type="checkbox" id="'.$data->id.'" class="switch" ';
if ($data->status == 1) {
$button .= "checked";
}
$button .= '><span class="slider round"></span></label>';
$button .= '</td></tr></table>';
return $button;
})
->rawColumns(['action'])
->make(true);
}
return view('Casting.castingss');
}
public function changeStatus(Request $request)
{
$casting = Casting::find($request->id);
$casting->status = $request->status;
$casting->save();
return response()->json(['success'=>'Status change successfully.']);
}
Мой сценарий :
$('#datatableRows').DataTable({
processing: true,
serverSide: true,
ajax:{
url: "{{ route('castingss.getdata') }}",
},
columns:[
{
data: 'casting_photo',
name: 'casting_photo',
render: function(data, type, full, meta){
return "<img src={{ URL::to('/') }}/castingimages/" data " class='list-thumbnail responsive border-0 card-img-left' />";
},
orderable: false
},
{data:'casting_name',
name: 'casting_name',
render:function(data,type,full,meta){
return "<a href='profile'>" data "</a>";
}
},
{
data: 'casting_cin',
name: 'casting_cin'
},
{
data: 'casting_phone',
name: 'casting_phone'
},
{
data: 'action',
name: 'action',
orderable: false
}
],
});
$(document).on('change', '.switch', function(){
var status = $(this).prop('checked') == true ? 1 : 0;
var id = $(this).attr('id');
$.ajax({
type: "GET",
dataType: "json",
url: '/changeStatus',
data: {'status': status, 'id': id},
success: function(data){
console.log(data.success)
}
});
});
Когда я запускаю ewecute , я получаю следующую ошибку : «сообщение»: «Создание объекта по умолчанию из пустого значения» В моем контроллере , строка : $casting->status = $request->status;
Я предполагаю, что для переменной состояния нет значения. как я могу определить значение пользовательского переключателя внутри таблицы данных Как я могу решить эту проблему ? если у вас есть какие-либо идеи, помогите мне
Комментарии:
1. возможно, проблема с идентификатором не определена .попробуйте предупредить(идентификатор), получите ли вы значение или нет
Ответ №1:
Есть две возможности .Один из них-данные получены пустыми, поэтому лучше проверить правильность передачи данных контроллеру. Если его правильный, то переданный идентификатор модели литья отсутствует.Так что добавьте проверку для этого
public function changeStatus(Request $request)
{
$request->validate(['status'=>'required','id'=>'required']);
$casting = Casting::find($request->id);
if($casting){
$casting->status = $request->status;
$casting->save();
return response()->json(['success'=>'Status change successfully.']);
}
return response()->json(['failed'=>'Status change failed.'],422);
}
Обновленный
Поскольку вы использовали switch
имя класса для label
, а также для input checkbox
так
$button .= ' <input type="checkbox" id="'.$data->id.'" class="switch selectRow" ';
затем измените
$(document).on('change', '.selectRow', function(){
Комментарии:
1. также лучше, если первое предупреждение в идентификаторе javacript будет получено или нет
2. , он получает идентификатор , но я получаю сейчас {«сообщение»:»Данные были неверными.»,»ошибки»:{«идентификатор»:[«Поле идентификатора обязательно».]}}
3. тогда значение идентификатора не передается.проблема с идентификатором в основном не определена.проверьте предупреждение(идентификатор) перед вызовом ajax
4. похоже, вы использовали класс switch для маркировки, а также для ввода, поэтому добавьте еще один новый класс для ввода, который уникален для ввода, а затем измените $(документ).on («изменить»,». switch», функция(){ здесь
5. У меня есть вопрос, если это возможно, могу ли я одновременно изменить статус на 0 и скрыть его от datatable?