前端弹出提交成功,后台问卷列表一条没有,数据库里问卷记录表 0 行,浏览器控制台也没有任何报错。日志里能对上时间点,这种反而好排。
提交走 admin-ajax,nonce 在整页缓存之后过期,check_ajax_referer 返回 false,处理函数直接 wp_die(-1)。前端只判断请求有没有抛异常,非 200 也被当成成功,提示照样弹出来。这一点先确认清楚,后面就不用反复试。
if (!check_ajax_referer('survey_nonce', 'nonce', false)) {
wp_send_json_error(array('msg' => '页面已过期,请刷新'), 403);
}
围绕「问卷提交数据丢失」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
处理上按这个顺序:check_ajax_referer 第三个参数传 false,自己判断并返回 JSON 错误;前端按 response.success 判断,别只看 HTTP 状态;问卷页排除整页缓存,或者把 nonce 单独走一个不缓存的接口取。
结果对不对很好判断,nonce 失效时前端提示刷新而不是成功,后台能收到数据,表里出现对应记录。
