Drupal 7通过JSON提交数据时日期字段未更新问题求助
我之前也碰到过一模一样的情况——明明返回200成功响应,日期字段就是纹丝不动,尤其是用date--popup组件的字段,Services对它的格式要求确实有点“挑剔”。结合你的场景,给你几个实打实的排查和解决方向:
1. 先确认字段机器名完全正确
首先核对field_date_of_age是不是这个日期字段的准确机器名。有时候我们会不小心写错下划线或者混淆字段名称(比如把date_of_age写成date_of_birth),这是最基础但最容易忽略的坑。
2. 调整提交的日期格式(关键!)
Drupal 7的Services模块处理date字段时,很多场景下不认可分开的date+time格式,而是需要用value键包裹完整的日期时间字符串。你可以把提交的数据改成这种格式试试:
"field_date_of_age": { "und": [ { "value": "2018-04-01 00:00:00", "timezone": "Asia/Kolkata", "timezone_db": "Asia/Kolkata" } ] }
我之前就是靠改这个格式解决了问题,分开的date和time字段经常会被Services的解析逻辑忽略。
3. 核对时区设置的一致性
确保你提交的timezone和timezone_db和站点后台的日期字段配置完全一致。比如去内容类型的字段设置里,看看这个日期字段的“时间处理”选项是不是用的Asia/Kolkata时区,如果后台设的是UTC,时区不匹配可能会导致数据“静默”不更新(不会报错,但就是存不进去)。
4. 检查用户权限
虽然返回了200响应,但也要确认调用Services的用户,是否拥有该内容类型的编辑权限,以及这个日期字段的单独编辑权限。Drupal的权限系统有时候会出现“表面成功但实际无权限修改”的情况,Services也会遵循这个逻辑。
5. 开启Services调试日志找线索
如果上面的方法都没用,就开启Services的调试功能抓细节:
- 进入
admin/structure/services/list/[你的服务端点]/settings(替换成你自己的端点名称) - 勾选“启用调试”选项并保存
- 重新发送更新请求,然后去
admin/reports/dblog查看日志,里面会有关于字段解析的警告或错误,这能帮你精准定位问题
要是调试日志里有异常信息,你可以贴出来,我再帮你深挖原因。
内容的提问来源于stack exchange,提问作者Balraj Natesan

