找不到 Fetch 和 JQuery Ajax 之间的区别

Can't find difference between Fetch and JQuery Ajax

我正在尝试向私人 API(托管 Itop)发出 API 请求,文档中有一个 JQuery Ajax 的示例,但我做到了我的所有其他人都使用 fetch 调用,我也想这样做,但我没有得到正确的响应。

获取方法 returns 我的代码是 200,但使用 HTML 而不是 JSON(内容与 jQuery AJAX JSON一个)。

这是 2 个函数:

// Code made by myself - don't get the right response
fetch(url, {
  method: "POST",
  headers: {
    "accept": "application/json",
  },
  mode: "cors",
  accept: "application/json, text/javascript, *!/!*; q=0.01",
  body: JSON.stringify({
    auth_user: user,
    auth_pwd: password,
    json_data: JSON.stringify({
      "operation": "list_operations",
    })
  })
})
  .then(response => response.json())
  .then(data => {
    console.log(data);
  })
// Code from the doc example - working
$.ajax({
  type: "POST",
  url: url,
  dataType: "json",
  data: {
    auth_user: user,
    auth_pwd: password,
    json_data: JSON.stringify({
      "operation": "list_operations"
    })
  },
  crossDomain: 'true'
})
  .then(
    function(data, textStatus, jqXHR) {
      console.log(data);
      console.log(textStatus);
      console.log(jqXHR);
    },
    function(jqXHR, textStatus, errorThrown) {
      console.debug(jqXHR);
      console.log("ERROR !!\n" +
        "status: " + textStatus + " (" + jqXHR.status + ")\n" +
        "error: " + errorThrown);
    }
  );

在 jQuery.ajax 中,当您传递 data 一个 object:

  • 它将被编码为application/x-www-form-urlencoded数据
  • jQuery 将包含一个 Content-Type: application/x-www-form-urlencoded header

在 fetch 中,您正在传递 body 字符串 JSON 并且 fetch 将包含 Content-Type: text/plain header .

所以:

  • 您传递的数据编码错误
  • 您传递的 Content-Type 与服务器期望的不匹配 您的数据实际是什么

fetch一个URLSearchParamsobject.

这将使用正确的格式进行编码,fetch 将从中推断出正确的内容类型。