如何使用ajax和laravel 5.6

时间:2018-06-02 19:13:23

标签: javascript php ajax laravel-5.6

我有大约20个text-boxcheckboxselect以及四个文件类型输入。我想使用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&register=on&...

虽然我想要这样的东西:

     META     |     VALUE
--------------+--------------
    Logo      |    MyLOGO
  site_title  |    title
   register   |     On

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

嗯,3天后终于得到了答案。所以,如果有人需要或有我的问题,我会把我的代码放在这里。

以上代码是工作,只需要进行一些更改,并在此处进行更改。

//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);
 });

好吧,现在工作正常。