【问题标题】:What is wrong with my javascript fetch API call?我的 javascript fetch API 调用有什么问题?
【发布时间】:2021-08-02 05:00:52
【问题描述】:

我对 Django 后端服务器进行了 javascript fetch API 调用

const res = fetch(url, {
  credentials: 'include',
  method: 'POST',
  mode: 'same-origin',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'X-CSRFToken': csrftoken
  },
  body: JSON.stringify(requestBody),
  })
  .then((response) => response.json())
  .then((responseJson) => {
    return responseJson.movies;
  })
  .catch((error) => {
    console.error(error);
  });

如果我在请求中使用它之前在控制台上输出requestBody,它看起来如下

{"add-Choice":["L"],"add-Left":["1"],"add-Right":["1"],"add-Value":["100"],"add-match":["8"],"user":["siteuser1"],"csrfmiddlewaretoken":["3K89ZvofjhIL2nZQoCcxphjmXborujsaLPn2FzlYiVmiBLODWhQQiAB5BhSXkQcF"],"add":["Submit"]}

这里的字符串“add-”被用作 Django 侧视图 post 方法的表单前缀。 但是,在服务器视图方面,如果我按如下方式打印 request.POST

def post(self, request, *args, **kwargs):
    print('Post request: ', request.POST)

我得到的输出是一个空的 QueryDict,如下所示

Post request:  <QueryDict: {}>
Internal Server Error: /matchoffers/8

请求被发送到正确的 URL,并被正确的 view-post 方法获取。但它失败了,因为请求是空的。

【问题讨论】:

  • 我怀疑requestBody已经是JSON了,你不需要再把它串起来。
  • 这能回答你的问题吗? Django & TastyPie: request.POST is empty
  • @Ivar 这是正确的指针。但是,该页面上接受的答案存在小问题。数据存在于 request.body 中。但是,我在访问该数据时遇到了问题。有一些错误说从请求的数据流中读取后无法访问正文。我能够通过 request.data 访问表单数据。长话短说,如果你在 fetch->body 中使用带有表单数据的 fetch api,那么在服务器端使用 request.data。

标签: javascript django fetch-api


【解决方案1】:

如果您正在做基于 REST 的 Web 服务……您应该忽略 请求.POST。

— Malcom Tredinnick, Django developers group

Just in case you are using DRF and you forgot to tell us

【讨论】:

  • 使用 request.data 在 fetch->body 中访问我的表单数据。
  • 老兄!我失去了你花了这么长时间的赏金:D我很高兴听到这个消息。感谢您的反馈
  • 所有开发人员的祸根。作战室会议。对此感到抱歉。
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多