кнопка переключения Laravel не отправляет значение обратно в БД AJAX - PullRequest
0 голосов
/ 03 сентября 2018

Я использую Laravel и ajax для отправки запроса на обновление БД. Когда значение is_active равно 1, переключение флажка обновит значение is_active в дБ, но когда значение is_active равно 1, переключение флажка NOT обновит значение is_active в БД Кроме того, у меня возникают проблемы с получением значения '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

Это мой js в html файле: -

@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 голосов
/ 03 сентября 2018

Прежде всего, я рекомендую вам Laravel Collective для создания входных данных формы.

У вас есть несколько ошибок, возможно, вашу проблему можно решить, просто исправив первую точку, но вы должны проверить все из них.

Неправильно ожидаемое значение внутри контроллера:
В вашем jQuery коде вы присваиваете is_active значение 1, но в вашем контроллере вы проверяете, является ли оно on. Просто сверьтесь с вводом запроса, если оно равно 0, оно будет оценено как ложное.

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

Или просто:

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

Повторные идентификаторы ввода:

<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{{ $loop->index }}"
id="is_active{{ $loop->index }}"

Повторные имена:
То же, что и выше, у вас, вероятно, несколько name="is_active". Это не недействительный HTML, но когда вы работаете с PHP, вы должны использовать имена массивов: name="is_active[]".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...