使用反馈原生

时间:2015-07-03 08:19:51

标签: http react-native fetch-api

以下代码是使用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中的requests.post(url,data = payload)。

2 个答案:

答案 0 :(得分: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 

或者您可以使用其源代码的相关部分,但这仍然需要its license

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 })
})

答案 1 :(得分:0)

不确定。查看github中的fetch文档:https://github.com/github/fetch

它使用document / 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
})