
react native 的 fetch api 要求 post 请求的 body 必须是字符串(如 json.stringify),而不能直接传入 javascript 对象,否则请求会失败或被服务器拒绝。
react native 的 fetch api 要求 post 请求的 body 必须是字符串(如 json.stringify),而不能直接传入 javascript 对象,否则请求会失败或被服务器拒绝。
在 React Native 中调用 RESTful API 时,一个常见误区是将 JavaScript 对象直接赋值给 `body` 字段——这在 Postman 中可能“看似正常”(因 Postman 自动序列化),但在原生环境的 `fetch` 中会导致请求无效:服务器收不到解析后的数据,甚至返回 400 或空响应。
✅ 正确做法是:始终使用 JSON.stringify() 将请求体对象序列化为字符串,并确保 Content-Type 头明确声明为 'application/json':
const payload = {
ad: 'test',
telefon: 'test',
islem: 'test',
sube: 'test',
saat: 'test',
};
async function harrik() {
try {
const response = await fetch('https://localhost/api/test/cetran', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload), // ✅ 关键修复:必须序列化
});
const result = await response.json();
console.log('Success:', result);
} catch (error) {
console.error('Request failed:', error.message);
}
}
⚠️ 补充注意事项:
-
本地开发慎用
localhost:在 iOS/Android 模拟器或真机中,localhost指向设备自身,而非开发机。请改用http://127.0.0.1(部分安卓支持)或你的本机局域网 IP(如http://192.168.x.x),并确保后端已配置 CORS(开发期可临时允许*); -
避免混用
.then()和async/await:上述示例统一使用await,语义清晰、错误处理更可靠;若需链式处理,建议全程 Promise 风格或全程 async/await; -
服务端需正确解析 JSON:确保后端(如 Express、Laravel、Django)已启用 JSON 解析中间件(如
express.json()); -
调试建议:在服务端打印原始请求体,或使用
console.log(JSON.stringify(payload))验证前端发送内容是否符合预期。
掌握这一基础规范,可避免 80% 以上的 React Native 网络请求失败问题。











