【问题标题】:Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body in react-admin无法在“窗口”上执行“获取”:使用 GET/HEAD 方法的请求在 react-admin 中不能有正文
【发布时间】:2019-06-20 17:29:39
【问题描述】:

我正在使用react-adminframework,并且我已经编写了自己的DataProvider。我试图在创建用户时实现这一点,同时也会创建一个 UserPossession 实例。我的下面的代码实现了这一点,但 react-admin Front-end 只显示警告消息:

Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body 

我检查了开发人员工具中的网络选项卡,对服务器的每个请求都是正确的,没有错误。这让我感到困惑并坚持这一点,因为我不知道该警告是什么意思,也不知道它为什么会发生。

我的代码是convertDataRequestToHTTP 常量的一部分,如下所示:

if (resource === 'User') {
  url = `${apiUrl}/${resource}`;
  options.body = params.data;
  httpClient(url, {
    method: 'POST',
    body: JSON.stringify(options.body),
  })
  .then(response => (
    url = `${apiUrl}/Location`,
    options.method = 'POST',
    options.body = JSON.stringify({
       "odata.type": "HardwareDatabase.UserPossession",
       "Name": response.json.Login,
       "UserId": response.json.Id
    }),
    httpClient(url, {
      method: options.method,
      body: options.body
    })
  ));
}

如果您对代码有任何疑问,我可以澄清一下。

提前感谢您的任何想法。

【问题讨论】:

  • if (resource === 'User') { resource = 'User'; 如果资源是USER 则将资源设置为USER?
  • 这也是有效的 js 语法吗? .then(response => ( resource = 'Location',。这段代码表示在完成承诺时返回一个对象,但 resource = 'Location', 不是有效的对象构造函数。也许您打算使用{ 而不是(,但不应该以逗号结尾...
  • @tic 我将编辑代码,使其不包含那毫无价值的行,语法是正确的。
  • 您不能在 GET 请求中发送正文,如果您想请求一些数据,您可以通过 url 作为请求参数传递它,否则您可能希望将 API 更改为 POST 请求
  • @KhaledOsman 但据我所知,我使用的是POST 方法,对吗?

标签: javascript reactjs react-admin


【解决方案1】:

既然您说此代码 sn-p 是 convertDataRequestToHTTP 的一部分,我可能会看到这个问题。 httpClient 不能在此常量中使用,因为它会创建对 API 的重复调用,或者在您的情况下会创建此警告。正确的方法是只声明options 常量。

url = `${apiUrl}/${resource}`;
options.body = JSON.stringifiy(params.data);
options.method = 'POST';

稍后在将响应从 OData 转换为强制 React Admin 格式的常量中,声明 httpClient

 params.data = {
    "odata.type": "HardwareDatabase.UserPossession",
    "Name": response.json.Login,
    "UserId": response.json.Id
 };
 httpClient(`${apiUrl}/Location`, {
    method: 'POST',
    body: JSON.stringify(params.data),
 })

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2018-07-22
    • 1970-01-01
    • 2022-01-01
    • 2021-11-26
    • 2021-04-26
    • 1970-01-01
    • 2018-08-13
    • 2019-10-13
    相关资源
    最近更新 更多