我在ReactJS中编程时使用Axios,我假装向服务器发送DELETE请求。

要做到这一点,我需要头文件:

headers: {
  'Authorization': ...
}

而身体是由

var payload = {
    "username": ..
}

我一直在网上搜索,只发现DELETE方法需要一个“参数”,不接受“数据”。

我一直想这样发送

axios.delete(URL, payload, header);

甚至

axios.delete(URL, {params: payload}, header);

但似乎什么都不管用……

有人能告诉我,如果这是可能的(我假设是)发送一个删除请求与头部和主体,以及如何这样做?


当前回答

对于删除,您将需要按照以下步骤进行操作

axios.delete("/<your endpoint>", { data:<"payload object">})

这对我很管用。

其他回答

要通过axios发送带有一些头的HTTP DELETE,我已经这样做了:

  const deleteUrl = "http//foo.bar.baz";
  const httpReqHeaders = {
    'Authorization': token,
    'Content-Type': 'application/json'
  };
  // check the structure here: https://github.com/axios/axios#request-config
  const axiosConfigObject = {headers: httpReqHeaders}; 

  axios.delete(deleteUrl, axiosConfigObject);

不同HTTP动词(GET, POST, PUT, DELETE)的axios语法很棘手,因为有时第二个参数应该是HTTP正文,而在其他时候(当它可能不需要时),您只需将头信息作为第二个参数传递。

然而,假设你需要发送一个没有HTTP正文的HTTP POST请求,那么你需要传递undefined作为第二个参数。

请记住,根据配置对象(https://github.com/axios/axios#request-config)的定义,在调用axios.delete时,仍然可以通过data字段在HTTP调用中传递HTTP主体,但是对于HTTP DELETE谓词,它将被忽略。

第二个参数有时是HTTP主体,有时是axios的整个配置对象,这种混淆是由于HTTP规则是如何实现的。有时HTTP调用被认为是有效的,并不需要HTTP主体。

axios.post('/myentity/839', {
  _method: 'DELETE'
})
.then( response => {
  //handle success
})
.catch( error => {
   //handle failure
});

感谢: https://www.mikehealy.com.au/deleting-with-axios-and-laravel/

我找到了一个有效的方法:

axios
      .delete(URL, {
        params: { id: 'IDDataBase'},
        headers: {
          token: 'TOKEN',
        },
      }) 
      .then(function (response) {
        
      })
      .catch(function (error) {
        console.log(error);
      });

我希望这对你也有用。

我尝试了以上所有的方法,但对我都不起作用。我最终只是使用PUT(灵感来自这里),只是改变了我的服务器端逻辑,对这个url调用执行删除。(django rest框架函数重写)。

e.g.

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });

所以在尝试了几次之后,我发现它起作用了。

请按顺序做,这很重要,否则不行

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});