无法在响应中发出Axios POST请求

时间:2020-09-05 17:35:37

标签: reactjs axios

我无法在axios中使用react发出发布请求,而我正在向我的php服务器发出发布请求,并想在通过发布请求获取的mysql中插入数据。 这是我的代码。

const url = "http://localhost:80/react-backenda/";
const axios = require('axios');
axios.post(url, { 
  SendBy: 'username', 
  Sendto: 'got_name', 
  Msg: 'input'
})
.then(res=> console.log(res.data))
.catch(err => console.log(err));

我正在我的控制台中获取它:

Notice: Undefined index: Msg in C:\xampp\htdocs\react-backenda\index.php on line 10

Notice: Undefined index: Sendby in C:\xampp\htdocs\react-backenda\index.php on line 11

Notice: Undefined index: Sendto in C:\xampp\htdocs\react-backenda\index.php on line 12
done

这是我的php脚本:

    <?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "msg-clone";
$conn = mysqli_connect($servername, $username, $password, $database);
if(!$conn){
    die("could not connect to server!");
}
$recText = $_POST['Msg'];
$sendby = $_POST['Sendby'];
$sendto = $_POST['Sendto'];
     echo $recText;
     $sql = "INSERT INTO `messages` (`id`, `text`, `sendby`, `sendto`, `time`) VALUES (NULL, '$recText', '$sendby', '$sendto', current_timestamp());";
     $res = mysqli_query($conn, $sql);
     if ($res){
         echo "done";
     }else {
         echo "err";
     }
?>

帮助解决此问题。

1 个答案:

答案 0 :(得分:0)

默认情况下,Axios serializes your object to JSON。这意味着您将必须在PHP后端中以JSON形式接收它,或配置axios实例以像浏览器在简单表单上那样以form data的形式发送它。

要在PHP上将其作为JSON接收,您可以这样做:

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

$recText = $data['Msg'];
$sendby = $data['Sendby'];
$sendto = $data['Sendto'];

但是,如果您想在前端处理它,它将是这样的:

var formData = new FormData();
formData.append("SendBy", "username");
formData.append("Sendto", "got_name");
formData.append("Msg", "input");

axios.post(url, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
})

注意:正如Dharman所警告的那样,您的后端代码存在与SQL注入相关的严重安全问题,将连接和查询处理隔离在单独的Classes/Files上也很不错。如果您正在开发生产应用程序甚至只是学习,请注意这些细节,还有一些初学者的朋友框架,可让您轻松地为Laravel等较小或较大的项目创建良好的结构。

样品: