FormData не передает значение флажка - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь отправить форму, используя FormData, все типы ввода работают нормально, кроме флажка. Ajax не публикует, если значение 1 или 0 из флажка.

<form  id="update-form" method="PUT"  enctype="multipart/form-data" >
    <input type="text" id="text" name="text" value="Hello"> //fine
    <input type="checkbox" id="visa" name="visa" value="0"> //not posting    
    <button type="submit"  name="id" id="update-data" > UPDATE</button></form>

Ajax:

jQuery(document).ready(function(e)  {
$('#update-data').on('click', function(e) {
var formData = new FormData(document.getElementById("update-form"));
    $.ajax({
 type: "POST",
            url: "subject/" + $('#update-data').attr("value"),
                headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      },
            data:formData,
            processData: false,
            contentType: false,
            cache: false,

            success: function (data) {
alert("Updated")
} },
}); }); });

Контроллер:

$teacher->update($request->all());

Я пытался добавить FormData, но он также не работает.

var checkbox = $("#update-form").find("input[type=checkbox]");
$.each(checkbox, function(key, val) {
    formData.append($(val).attr('name'), $("#visa").is(':checked'))

});

Ошибка:

local.ERROR: SQLSTATE [22007]: неверный формат даты и времени: 1366 Неверное целочисленное значение: «true» для столбца teacher_db. teachers. visa

i want to post check box value 1 if it is checked and 0 if unchecked.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2019

Пожалуйста, всегда читайте ошибки. В сообщениях об ошибках сказано:

local.ERROR: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'true' for column teacher_db.teachers.visa

Вы просто не указали правильное значение для конкретной колонки (визы). Каким-то образом значение, поставляемое Ajax для флажка visa, представляет собой строку true (не «1» или «0»). Поскольку логическое значение использует integer, вам необходимо правильно привести это значение (строку) перед вставкой в ​​БД в integer.

$teacher->update($request->merge([
    'visa' => in_array($request->input('visa'), ['true', 1, '1']),
])->all()));
.
0 голосов
/ 02 ноября 2019

на вашем контроллере, сделайте это

$posted = Input::all();

if ( ! isset($posted['visa']){
    $posted['visa'] = 0; 
}else{
    $posted['visa'] = 1;
}

Пожалуйста, дайте мне знать, если это поможет

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