Php ReactJS axios POST请求将所有选项作为一个带空值的JSON键发送

Php ReactJS axios POST请求将所有选项作为一个带空值的JSON键发送,php,reactjs,ionic-framework,axios,codeigniter-4,Php,Reactjs,Ionic Framework,Axios,Codeigniter 4,我在前端使用ReactJS,并向CodeIgniter4后端发出POST请求 我的前端电话是这样的- axios.post('http://localhost/exampleApiEndpoint', { sample_key: 'sample_value' }) .then(response => { // Do something }) 如果我运行以下代码- $this->request->getPost('sample_key'); 我

我在前端使用ReactJS,并向CodeIgniter4后端发出POST请求

我的前端电话是这样的-

axios.post('http://localhost/exampleApiEndpoint', { sample_key: 'sample_value' })
    .then(response => {
        // Do something
    })
如果我运行以下代码-

$this->request->getPost('sample_key');
我希望它返回'sample_value',但我得到
null



所以我决定在CI4中运行下面的代码,看看后台发生了什么

$this->request->getRawInput()
它返回
{{“hello”:“world”}::}

当我运行
$this->request->getPost(“{”hello“:“world”}”)时,就可以肯定了它给我空字符串(没有空字符串,但为空字符串)

我对这两个框架都不熟悉。我不能完全确定如何从这一点出发。 我使用了下面的代码片段作为一种变通方法,只要输入中没有符号,它就可以工作。如果有,它们将转换为下划线。这不太理想

$raw_input = $this->request->getRawInput();
$json_input = json_decode(array_key_first($raw_input));

Axios以JSON Body格式发送数据,同时将数据发送到API。为了让您以POST的形式发送数据,您必须使用FormData API

let formData = new FormData();
formData.append('sample_key','sample_value');
然后发送此FormData对象,而不是发送的Javascript对象:

axios.post('http://localhost/exampleApiEndpoint', formData)
    .then(response => {
        // Do something
    })
在CI4控制器中,您可以通过以下方式获取数据:

$data = $this->request->getPost();
参考:

和作为JSON负载的原始输入流

用于从请求主体获取此流,并将其作为
JSON
解析为对象

$json=$this->request->getJSON();
//从对象访问示例\u键字段
$json->sample_键;
您还可以通过为第一个参数传递
true
,将请求正文解析为关联数组

$json=$this->request->getJSON(true);
//访问数组中的“示例密钥”密钥
$json['sample_key'];

以这种方式创建数据对象&然后将此对象传递给post请求

let data = {sample_key: "sample_value"}

axios.post('http://localhost/exampleApiEndpoint', data)
.then(response => {
    // Do something
})

谢谢

我非常喜欢这个解决方案。看起来很优雅,但对我来说不合适<代码>$this->request->getJSON()返回null。@AlienSteak它应该返回已发布的有效负载。我花了一些时间来感谢这个解决方案。这对我有用。尽管我仍然希望以json格式发送数据。但这同样有效:)是的,这更方便,但是没有办法通过直接传递JSON来发布数据(至少据我所知)。