FormData未提交复选框值

时间:2019-11-01 22:06:41

标签: jquery ajax laravel

我正在尝试使用FormData提交表单,除复选框外,所有输入类型都可以正常工作。如果复选框中的值为1或0,则ajax不会发布。

<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错误   整数值:列teacher_dbteachersvisa

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

2 个答案:

答案 0 :(得分:0)

在您的控制器上,执行此操作

$posted = Input::all();

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

请告诉我是否有帮助

答案 1 :(得分:0)

请始终阅读错误。错误说:

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()));