代码之家  ›  专栏  ›  技术社区  ›  user3379893

如何使用fetch api发布数据和参数,如在axios中

  •  0
  • user3379893  · 技术社区  · 7 年前

    以下列AXIOS为例:

    axios.post(this.reportURL, reportData, {
      params: {
        param1: paramValue1,
        param2: paramValue2
      },
    });
    

    如何使用fetch api执行相同的操作?我看到参数是这样做的:

    fetch(this.reportURL, {
      method: "POST",
      body: "param1=paramValue1&param2=paramValue2",
      headers: 
        {
          "Content-Type": "application/x-www-form-urlencoded"
        }
    
    })
    

    由于body键用于存储参数,是否需要序列化整个reportdata对象并将其连接到现有参数?

    我不明白为什么Fetch API使用body键作为参数。

    此外,这不是我自己的API,我无法更改预期的POST请求。

    5 回复  |  直到 7 年前
        1
  •  2
  •   zero298    7 年前

    令人沮丧地, fetch() 并没有真正提供“干净”的方式来提供查询字符串URL参数。您只需将它们放在直接获取的URL中。这是您可以在Github上阅读到的一个争论点: How to pass url query params? #256 .

    有几种方法可以模拟它:

    const url = new URL("http://www.example.com");
    
    const params = {
      foo: "bar",
      fizz: "buzz"
    };
    
    const data = {
      more: "data",
      that: "I",
      want: "to",
      send: "please"
    };
    
    Object.entries(params).forEach(([k, v]) => url.searchParams.append(k, v));
    console.log(url);
    
    fetch(url, { // URL as http://www.example.com/?foo=bar&fizz=buzz
      method: "POST",
      body: JSON.stringify(data) // The actual body
    });

    既然你有 application/x-www-form-urlencoded 在您的问题中,您可能还想看看这个问题: Post a x-www-form-urlencoded request from React Native .

        2
  •  0
  •   Ziyo    7 年前

    你可以做到 body: JSON.stringify({ param1: paramValue1, param2: paramValue2 })

        3
  •  0
  •   Vitor M. Barbosa    7 年前

    看起来您已经很接近了,但是在第二个示例中,当您发出POST请求时,参数通常作为JSON出现在请求的主体上:

    fetch(this.reportURL, {
      method: "POST",
      body: JSON.stringify({
        param1: paramValue1,
        param2: paramValue2
      })    
    })
    
        4
  •  0
  •   Akrion    7 年前

    你可以 extract 碎片来自 reportData 把它传递给另一个对象 fetch 通过json.stringify。

    FETCH还支持 FormData 但这与我之前提到的对象方法没有太大的不同。

    AS per the docs 您可以指定 身体 如下所示:

    1. 阵列缓冲器
    2. arrayBufferView(uint8array和朋友)
    3. 斑点/文件
    4. 一串
    5. 乌尔斯查尔帕拉姆
    6. 格式数据
        5
  •  0
  •   Luca Kiebel    7 年前

    如果需要从哈希构造查询参数字符串,并在站点上使用jquery,则可以执行以下操作:

    var url = "http://www.abx.com?" + $.param({foo: "bar", baz: "kuuq"}) fetch(url)

    以下是FETCH标准在其文档中建议的内容(另请参见whatwg/fetch 56中的讨论):

    var url = new URL("https://geo.example.org/api"), params = {lat:35.696233, long:139.570431} Object.keys(params).forEach(key => url.searchParams.append(key, params[key])) fetch(url).then(...)

    这要求浏览器实现url.searchparams。旧浏览器可能需要多段填充。

    快读一遍,希望能帮上忙

    Src: https://github.com/github/fetch/issues/256