使用 Axios 将对象从 React.js 发布到 PHP

Posted

技术标签:

【中文标题】使用 Axios 将对象从 React.js 发布到 PHP【英文标题】:Posting object from React.js to PHP using Axios 【发布时间】:2020-07-01 14:38:27 【问题描述】:

我正在尝试使用 React JS 作为前端和 php 作为后端来创建登录表单。我似乎无法弄清楚如何将表单的数据(电子邮件和密码)传递给 PHP 脚本。我尝试使用谷歌搜索,所有解决方案要么对我不起作用,要么数据不足。我正在使用 React v16。

这是我的前端代码:

import React,  useState  from 'react';

// libraries
import  Col, 
          Button, 
          Form, 
          FormGroup, 
          Label, 
          Input from 'reactstrap';
import Axios from 'axios'          


const App = () => 

  const [email, setEmail] = useState('')
  const [password, setPassword] = useState('')

  const submit = () => 
    Axios(
      method: 'POST',
      url: 'http://localhost:80/api/login.php',
      headers: 
        'Content-Type': 'application/json',
      ,
      data: 
        email,
        password
      
    )
    .then((response) => 
      console.log(response)
    )
    .catch((error) => 
      console.log(error)
    )
  

  return (
    <div>

      <Form>
        <FormGroup row>
          <Label for="exampleEmail" sm=2>Email</Label>
          <Col sm=10>
            <Input value=email onChange=e => setEmail(e.target.value) type="email" name="email" placeholder="email" />
          </Col>
        </FormGroup>

        <FormGroup row>
          <Label for="examplePassword" sm=2>Password</Label>
          <Col sm=10>
            <Input value=password onChange=e => setPassword(e.target.value) type="password" name="password" placeholder="password" />
          </Col>
        </FormGroup>

        <FormGroup check row>
          <Col sm= size: 10, offset: 2 >
            <Button onClick=submit>Submit</Button>
          </Col>
        </FormGroup>
      </Form>

    </div>
  );


export default App;

这是我的后端:

<?php

$data = json_decode(file_get_contents("php://input"));
echo "received data";
print_r("$data");

?>

现在,如果我查看 Chrome 检查器,它会说 Request Payload is email: "xxx", password: "xxx" 所以我知道我的前端正在尝试发送数据到login.php,但我不知道如何用PHP“捕捉”前端发送的数据。

我打算做的是:一旦login.php得到数据,它将返回数据的JSON对象和字符串"received data"返回到前端。

请帮我看看这个。我研究了一整天,仍然找不到解决方案。

仅供参考,我一直在尝试我可以在网上找到的所有解决方案,例如我试过这个:

let data = 
      email,
      password
    

let form = new FormData()
form.append('data', data)

Axios.post('http://localhost:80/api/login.php', form)
.then(...)
.catch(...)

后端将是:

$email = $_POST['email'];
$password = $_POST['password'];

但无济于事。

【问题讨论】:

请检查您的 API URL 是否正确? URL: 'http://localhost:80/api/login.php 我认为端口缺少某些东西 @SanatGupta 是正确的。我在 Wamp 服务器上运行 login.php 并且端口确实是 80 【参考方案1】:

您好,请更换您的 PHP 代码,希望您能得到回复。

谢谢

<php
    header('Access-Control-Allow-Origin: *');
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Disposition, Content-Type, Content-Length, Accept-Encoding");
    header("Content-type:application/json");
    $data = json_decode(file_get_contents("php://input"));
    echo "received data";
    print_r($data);
?>

【讨论】:

@Jonathan 请看一下答案,您只需要替换您的 PHP 代码,您就会得到回复。实际上,您需要允许 cors 域进行 API 访问。谢谢 所有头文件的作用是什么? 顺便说一句,它现在可以工作了。我现在从 login.php api 得到响应。非常感谢 所有标题都允许您请求的域 听起来不错,您的工作已经完成,请投票标记为答案,谢谢

以上是关于使用 Axios 将对象从 React.js 发布到 PHP的主要内容,如果未能解决你的问题,请参考以下文章

react.js 使用 axios 发布数据到 php,但是 php echo 为空

Axios 没有使用 useEffect() (React Js) [重复]

React js 和 axios POST 请求发送空数组

使用 axios 从 react js 调用 Spring Boot get 方法时,浏览器显示“请求已被 CORS 策略阻止”

React JS:用 axios 接收 cookie 时出现问题,这是从 JWT Django 接收的

Axios在react js中获取请求时出错