【问题标题】:how to submit data from a data form in axios如何在axios中从数据表单提交数据
【发布时间】:2021-11-14 17:56:23
【问题描述】:

我正在尝试向端点发送表单,但收到错误禁止 403,并且我已经尝试过 api 测试并且端点工作正常

const SendData = (event) => {
    event.preventDefault();
    let respuestasUSer = new FormData();
    respuestasUSer.set('curso', state.curso)
    respuestasUSer.set('nombre', state.nombre)
    respuestasUSer.set('q1', state.Pregunta1)
    respuestasUSer.set('q2', state.Pregunta2)
    respuestasUSer.set('q3', state.Pregunta3)
    respuestasUSer.set('q4', state.Pregunta4)
    respuestasUSer.set('q5', state.Pregunta5)
    respuestasUSer.set('q6', state.Pregunta6)
    respuestasUSer.set('q7', state.Pregunta7)
    respuestasUSer.set('q8', state.Pregunta8)
    axios({
        method: "post",
        url: "https://covid.cit0.com/guardar/encuesta/",
        data: respuestasUSer,
        headers: { "Content-Type": "multipart/form-data" },
      })
        .then(function (response) {
          //handle success
          console.log(response);
        })
        .catch(function (response) {
          //handle error
          console.log(response);
        });   
} 

在 api 测试中我这样做并且它对我有用,我如何将相同的内容传递给 axios?

【问题讨论】:

  • 第一步...删除Content-type 标头you don't need it。 403 响应表明您的身份验证凭据不允许您请求相关资源。您在上面的代码中似乎根本没有任何凭据,因此您需要分享更多信息
  • 我已经添加了一个图像,我已经能够使用测试 api 做到这一点
  • 您尝试发布到的站点要求在请求 cookie 中存在 CSRF token。您应该能够在收到的回复中看到这方面的详细信息。基本上,该站点不希望外部方发布内容。它也不支持 CORS 访问
  • 我正在向它传递一个 CSRF 令牌,但如果它在测试 api 中有效,如果我放置相同的令牌,为什么不能在我的应用程序中?
  • 在哪里?您的 Axios 请求中没有类似的内容。如果你已经在 cookie 中有令牌,你可以 try adding withCredentials: true 但我认为你只会遇到 CORS 错误

标签: javascript reactjs axios react-hooks form-data


【解决方案1】:

如果你使用 react 作为前端

首先您在输入文本字段中设置 onchange 事件,例如

<form>
<input type="text" name="first_name" placeholder="first name" onChange={handlechange} />

创建

像这样定义handlechange函数

function handlechange (e) {
        const {name,value} = e.target
        setstate({...state,[name]:value}) 

}

//在此之前要定义像const [state, setstate] = useState({})这样的状态

然后定义handleclick函数,如

    function handleclick (e) {
            e.preventDefault()
            
             axios.post('/super_admin/newuser',state).then((res)=>{
                
console.log(res.data)
                
            }).catch(err=>{

console.log(err.response.data)

})
    }

这是完整的代码

import {useState, } from 'react'
import axios from 'axios'

export default function Newuser() {

const [state, setstate] = useState({})

function handlechange (e) {
        const {name,value} = e.target
        setstate({...state,[name]:value})
    }

function handleclick (e) {
                e.preventDefault()
                
                 axios.post('/your api',state).then((res)=>{
                    
    console.log(res.data)
                    
                }).catch(err=>{
    
    console.log(err.response.data)
    
    })
        }

return (

<div>
<form>
<input type="text" name="first_name" placeholder="first name" onChange={handlechange} />
<button onClick={handleclick}>Create</button>
</form>
</div>
)

}

【讨论】:

  • 您确定您回答了正确的问题吗?这个答案似乎与上面的任何内容都不匹配
  • 我认为这是使用 axios 发送数据的方式
  • 他正在使用数据做出反应,这是什么错误兄弟简单地给 - 投票我正在努力给出这个答案 ok
  • 我认为你的回答不是根据我的问题,你给我的我已经做了,我想要的是通过 axios 发送一个表单数据,我用你的答案发送的是一个 JSON
  • 检查答案是否有效
【解决方案2】:

对于发送表单数据,您可以将 handleclick 函数编辑为类似的内容

    function handleclick (e) {
       e.preventDefault()

   const fd = new FormData()

                fd.append('first_name',state.first_name)

                 axios.post('/your api',fd).then((res)=>{
                    
    console.log(res.data)
                    
                }).catch(err=>{
    
    console.log(err.response.data)
    
    })
        }

【讨论】:

  • 为什么给 -vote 这是从数据正确发送的方式
  • 给我答复兄弟你为什么给-vote
  • 这在功能上与 OP 已有的有何不同?它如何解决他们的 403 响应问题?
  • 嘿,兄弟,意思是一样的,他正在使用什么人 sendData 我使用了 handleclick 什么人..?
猜你喜欢
  • 2021-01-16
  • 2019-02-11
  • 1970-01-01
  • 2020-09-10
  • 2019-04-15
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 2021-12-15
相关资源
最近更新 更多