首页 > 解决方案 > Axios 在 post 请求中发送数组而不是 json 对象

问题描述

我正在尝试使用 axios 从 Vuejs 前端向后端的 Laravel 发送一个发布请求。

const data = {
            file: {id}
        }

        axios.post('api/documents/remove', data).then((response) => {
                console.log(response.data);
            }
        }).catch(err => { console.log(err.response.data); })

在 laravel 中,我正在打印这样的请求,

 public function removeFile(Request $request)
 { 
    dd($request);
 }

这是我的输出。

Illuminate\Http\Request {#51
  #json: Symfony\Component\HttpFoundation\ParameterBag {#43
  #parameters: array:8 [
  "file" => array:1 [
    "id" => 61
  ]
}

标签: javascriptphplaravelvue.js

解决方案


PHP 的“数组”并不是真正的数组,它们是有序映射。这就是您的输出显示的内容,请求包含参数,这是一个有序映射,而file参数是一个有序映射id => 61。在 JavaScript 中,这将是一个对象(或者Map,有时);在许多其他语言中,它将是某种地图或字典。PHP 称它们为数组。

无论哪种方式,如果您访问file参数(我不“做” Laravel,所以我不知道您是如何做到的),您可以id像这样从中获取:$file[id ]。查看Laravel 文档,看起来会是:

$file = $request->input('file');
$id = $file['id'];

推荐阅读