This is related to Content-Type
. As you might have noticed from other discussions and answers to this question some people were able to solve it by setting Content-Type: 'application/json'
. Unfortunately in my case it didn't work, my POST request was still empty on the server side.
However, if you try with jQuery's $.post()
and it's working, the reason is probably because of jQuery using Content-Type: 'x-www-form-urlencoded'
instead of application/json
.
data = Object.keys(data).map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key])).join('&')
fetch('/api/', {
method: 'post',
credentials: "include",
body: data,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})