我有大约20个text-box
,checkbox
和select
以及四个文件类型输入。我想使用Laravel和AJAX将输入保存到数据库。
实际上,我可以保存所有输入,文件类型(图像)除外。
表: META | VALUE
我的路线: $this::resource('/settings','SettingController')->only(['index', 'store']);
控制器:
$setting = $request->all();
foreach ($setting as $meta => $value) {
$SF = new Setting();
$SF->meta = $meta;
$SF->value = $value;
echo $SF->save();
}
HTML:
<form>
<input type="text" name="site_title" id="site-title">
<input type="checkbox" name="register" id="register">
....
<input type="file" name="logo" id="logo">
<input type="file" name="favicon" id="favicon">
<input type="file" name="user_profile" id="user_profile">
<input type="file" name="Personal" id="Personal">
AJAX代码:
$('#setting-forms').on('submit', function () {
event.preventDefault();
let _token = $('input[name=_token]').val(); //Get Token
let FormInputs = $("#setting-forms").serialize();
$.ajax({
method: 'POST',
url: '/settings',
data: FormInputs ,
success: function (data) {
//Some Success MSG
},
error: function () {
//Some Error MSG
},
});
现在,此代码保存除文件类型之外的所有输入,我的结果如下:
META | VALUE
--------------+--------------
site_title | Laravel
register | On
.... | ...
但我想保存所有图像文件,所以我将我的AJAX代码改为:
let formData = new FormData();
let logo = $("#logo")[0].files[0];
formData.append('logo', logo);
formData.append('FormInputs', FormInputs);
$.ajax({
method: 'POST',
url: '/settings',
data: formData,
contentType: false,
processData: false,
headers: {
'X-CSRF-TOKEN': _token
},
现在我可以保存徽标,但我的文本全部保存在一行中。我明白了:
META | Value
--------------+-----------------------------------
Logo | MyLOGO
FormInputs | site_title=titlea®ister=on&...
虽然我想要这样的东西:
META | VALUE
--------------+--------------
Logo | MyLOGO
site_title | title
register | On
我该如何解决这个问题?
答案 0 :(得分:0)
以上代码是工作,只需要进行一些更改,并在此处进行更改。
//let FormInputs = $("#setting-forms").serialize();
let FormInputs = $("#setting-forms").serializeArray();
// formData.append('FormInputs', FormInputs);
jQuery.each(FormInputs, function (i, field) {
formData.append(field.name, field.value);
});
好吧,现在工作正常。