fetch()无法发送JSON对象,请求体为空问题求助
问题根源与解决方案
- 核心错误:你把
body属性错误嵌套在headers对象内部了。fetch的配置项中,body是和method、headers同级的顶层属性,而非headers的子属性。这个结构错误直接导致请求体未被正确设置,服务器自然接收不到内容。
修正后的代码:
async testPost(){ const url = 'https://untitled-0clyb6aowq2u.runkit.sh'; var payload = { "test" : 1 }; const settings = { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(payload) // 移至headers外部,与headers同级 }; try { const resp = await fetch(url, settings); const data = await resp.json(); if(data.ok != 1){ console.log('FATAL ERROR PIZDEC: '); console.log(data); return { ok: 0, error: data}; } console.log('Success:' + data.success); return; } catch (e) { return { ok: 0, error: e }; } }
- 补充说明:
- 确保服务器端配置了正确的JSON解析逻辑,比如Express框架需要添加
express.json()中间件 - Postman能正常请求是因为它正确维护了请求体与请求头的层级结构,而你的客户端代码结构错误导致请求体丢失
- 确保服务器端配置了正确的JSON解析逻辑,比如Express框架需要添加
内容的提问来源于stack exchange,提问作者Corvus Corax
相关产品推荐
相关产品推荐

