我正在尝试使用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错误 整数值:列
的'true'teacher_db
。teachers
。visa
i want to post check box value 1 if it is checked and 0 if unchecked.
答案 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()));