1

以下代码是使用 fetch polyfill 发出 HTTP POST 请求:

fetch(url, {
  method: 'post',
  body: JSON.stringify({
    token: this.state.token,
  }),
})
  .then((response) => response.json())
  .then((responseData) => {
    console.log(responseData);
  })
  .done();

此请求将数据作为字符串化 JSON obj 发送。有没有办法将数据作为类似于请求的键值对发送?在 python 中发布(URL,数据=有效负载)。

4

2 回答 2

8

听起来您想要与查询字符串相同的格式,因此导入/需要一个像https://www.npmjs.com/package/query-string这样的包,它似乎不依赖任何浏览器功能并且具有 stringify 方法:

queryString.stringify({
  foo: 'bar',
  nested: JSON.stringify({
    unicorn: 'cake',
  }),
});

//=> foo=bar&nested=%7B%22unicorn%22%3A%22cake%22%7D

或者,您可以只使用其源代码的相关部分,尽管这仍然受其许可的约束:

function toQueryString(obj) {
  return obj
    ? Object.keys(obj)
        .sort()
        .map(function (key) {
          var val = obj[key];

          if (Array.isArray(val)) {
            return val
              .sort()
              .map(function (val2) {
                return encodeURIComponent(key) + '=' + encodeURIComponent(val2);
              })
              .join('&');
          }

          return encodeURIComponent(key) + '=' + encodeURIComponent(val);
        })
        .join('&')
    : '';
}

然后,您可以在body参数中使用返回值fetch

fetch(url, {
  method: 'post',
  body: toQueryString({ token: this.state.token }),
});
于 2015-07-03T13:59:52.873 回答
0

当然。查看github中的fetch文档:https ://github.com/github/fetch

它使用文档/DOM web,但对于 react-native 情况应该是相同的——只需使用 FormData 对象并附加所有要发送的表单字段。

var form = document.querySelector('form')

fetch('/users', {
  method: 'post',
  body: new FormData(form)
})

和:

var input = document.querySelector('input[type="file"]')

var data = new FormData()
data.append('file', input.files[0])
data.append('user', 'hubot')

fetch('/avatars', {
  method: 'post',
  body: data
})
于 2015-07-03T09:07:53.820 回答