使用Axios和CodeIgniter发送带有JSON的POST请求

时间:2018-12-30 00:01:01

标签: php ajax axios

我正在尝试使用Axios发送数据:

axios.post( url,JSON.stringify({'i': '90'}))
    .then(function (response) {
        console.log(response);
    });

并在服务器上获取它:

var_dump(($this->input->post())); // Returns an array |  $_POST

对于上述JSON值,我得到以下响应:

  

array(2){     [“ {” i“:” 90“}”] =>     字符串(0)“”     [0] =>     字符串(0)“”   }

没有JSON.stringify的情况下,来自var_dump(($this->input->post()));$_POST的结果为空数组。

如何通过Axios发送POST带有JSON数据的请求,并通过PHP在服务器上获取它?

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,最终发现是由于XSS过滤, 使用

   $i = $this->input->post("i",false);

并且在axios中使用

var formdata=new FormData();
    formdata.append("key",value);

    this.axios.post("http://URL",formdata).then(res=>{})

答案 1 :(得分:0)

这是一种可能的解决方案,但我认为必须有更好的方法。

JS:

axios.post( url,JSON.stringify({'i': '90'}))
.then(function (response) {
    console.log(response);
});

PHP(CodeIgniter操作):

    $requestData = json_decode(file_get_contents('php://input'), true);

    foreach ($requestData as $key => $val){
        $val = filter_var($val, FILTER_SANITIZE_STRING); // Remove all HTML tags from string
        $requestData[$key] = $val;
    }
    var_dump($requestData);

响应:

  

array(1){     [“ i”] =>     字符串(2)“ 90”   }

答案 2 :(得分:0)

您需要使用json_decode:

$json_data = json_decode($this->input->post());
var_dump($json_data);

echo $json_data->i;

or

foreach($json_data as $data){
   echo $data->i;
}