以下代码是使用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)。
答案 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
})