【问题标题】:How can we convert ajax GET request into fetch API?我们如何将 ajax GET 请求转换为 fetch API?
【发布时间】:2022-01-25 15:06:34
【问题描述】:
function myFunction(username, mess_id) {
        mess = document.getElementById(mess_id);
        mess.innerText = "Sending...";
        $.ajax({
                type: 'GET',
                url: '/user/resend',
                data: {usr:username},
                success: function(data){
                        mess.innerText = data;
                }
        })
}

在 fetch API 中我写成:

message = document.getElementById('mess_id');
message.innerText = 'Sending...';
fetch(url)
.then(data => data.text())
.then(mess => message.innerText = mess)

但是,ajax 函数的 data 属性呢。

【问题讨论】:

标签: javascript ajax fetch-api


【解决方案1】:

您正在尝试发送 GET 请求,该请求应仅在查询字符串中保存数据,而不是在请求负载中。

因此,您可以使用它来发送用户:

function myFunction(username, mess_id) {
        mess = document.getElementById(mess_id);
        mess.innerText = "Sending...";
        $.ajax({
                type: 'GET',
                url: '/user/resend?usr=' + username,
                success: function(data){
                        mess.innerText = data;
                }
        })
}

但是,如果您仍想在请求正文中发送data: {usr:username},您可以使用fetch 发送这样的POST 请求:

async function postData(url = '', data = {}) {
  // Default options are marked with *
  const response = await fetch(url, {
    method: 'POST', // *GET, POST, PUT, DELETE, etc.
    headers: {
      'Content-Type': 'application/json'
      // 'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: JSON.stringify(data) // body data type must match "Content-Type" header
  });
  return response.text();  JavaScript objects
}

postData('/user/resend', {usr:username})
  .then(data => {
    console.log(data);
  });

【讨论】:

  • 没有什么能阻止使用 fetch 作为 GET。有多种方法可以创建查询字符串。建议 OP 需要改变方法可能不可行
  • 我说的是“应该”而不是“不能”。根据 MDN 上 GET 请求的官方文档,“HTTP GET 方法请求指定资源的表示。使用 GET 的请求应仅用于请求数据(它们不应包含数据)。” “在 GET 请求中发送 body/payload 可能会导致一些现有的实现拒绝请求——虽然规范没有禁止,但语义是未定义的。最好避免在 GET 请求中发送有效负载。”在此处查看更多信息:developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET
猜你喜欢
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2020-01-12
  • 1970-01-01
  • 2018-03-29
  • 2021-12-29
  • 2019-11-04
相关资源
最近更新 更多