无法访问反序列化json的数据

时间:2020-02-09 11:42:51

标签: json ajax laravel post

我正在使用ajax将数据发送到控制器,这是我的操作方式

var formData = JSON.stringify( $('#SubmitForm').serializeArray() );
$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
  }
});
$.ajax({
  type: 'POST',
  data: {formData},
  url: '{{route("fileController.sendFiles")}}',
  success: function(response) {
    console.log(response);
  },
  error: function(response){
    console.log(response);
  }
});

这是路线

Route::post('/sendFiles', ['uses' => 'FileController@sendFiles'])->name('fileController.sendFiles');

还有控制器

public function sendFiles(Request $request)
{
  //$data = json_decode($request->input('formData'), true);
  //return $request->input('allFiles');
  $data = json_decode($request->input('formData'), true);
  return $data['allFiles'];
}

但是,我收到此错误

"message": "Undefined index: allFiles"

当我检查$ request的内容时,可以看到allFiles数组明显存在,但是如何访问它? 附言我尝试将解码时的第二个参数更改为false,没有区别。

$request data array

1 个答案:

答案 0 :(得分:0)

  • 首先,您的请求数据是对象的简单数组。因此,您无法使用“ allFiles”对其进行索引。
  • 第二,由于我们有多个属性名称为“ allFiles []”的对象,因此您可以过滤这些对象并返回其值。 (我不知道您将如何使用它,但这是代码的外观)
public function sendFiles(Request $request)
{
  //$data = json_decode($request->input('formData'), true);
  //return $request->input('allFiles');
  $data = json_decode($request->input('formData'), true);
  //filter all allFiles object
  $allFiles = array_filter($data, function($obj){ 
             if(isset($obj->name)){
                return $obj->name=="allFiles[]";
             }
             return false;
           });
  //get values for all the filtered objects
  $allFilesValues = array_map(function($obj){ return $obj->value; }, $allFiles);
  return $data['allFiles'];
}

让我知道这是否对您有用。