React js中如何通过PUT请求向Rest API发送当前日期时间?
问题原因
你触发400错误的核心原因是Date()直接调用返回的是本地化的人类可读时间字符串,你的后端REST API的日期时间字段无法解析该格式,因此判定请求非法。
你打印的Sun Oct 03 2021 14:28:59 GMT+0500 (Pakistan Standard Time)属于非标准的本地化格式,绝大多数后端框架的日期时间序列化组件默认不支持该格式。
解决方案
方法1(通用优先选择)
使用标准ISO 8601格式的时间字符串,几乎所有主流后端框架(包括你日志中显示的Django REST Framework)都能直接解析该格式,修改代码如下:
updateOrderStatus = async(id,status) => { let data = new FormData(); data.append('status',status ); // 替换原有的Date()为new Date().toISOString() data.append('orderStartTime', new Date().toISOString()); await api.put(`OrdersAPI/${id}/`, data); this.getNewOrders(); }
toISOString()输出的格式为2021-10-03T09:28:59.000Z,是跨语言通用的标准时间格式。
方法2(适配后端特殊格式要求)
如果你的后端明确要求其他时间格式(比如YYYY-MM-DD HH:mm:ss的本地时间格式),可以自行格式化后再传输,示例代码如下:
// 自定义时间格式化函数 const formatLocalDate = (date) => { const padZero = (num) => num < 10 ? `0${num}` : num; return `${date.getFullYear()}-${padZero(date.getMonth()+1)}-${padZero(date.getDate())} ${padZero(date.getHours())}:${padZero(date.getMinutes())}:${padZero(date.getSeconds())}`; } updateOrderStatus = async(id,status) => { let data = new FormData(); data.append('status',status ); data.append('orderStartTime', formatLocalDate(new Date())); await api.put(`OrdersAPI/${id}/`, data); this.getNewOrders(); }
额外排查点
如果修改后仍然返回400错误,可以按以下步骤排查:
- 确认后端
orderStartTime字段的属性要求,是否允许修改、是否有特殊时区限制 - 打开浏览器控制台的「网络」标签,查看PUT请求实际提交的表单数据,确认参数名拼写正确、值的格式符合后端要求
内容的提问来源于stack exchange,提问作者user16137336
相关产品推荐
相关产品推荐

