矩阵打分题需扁平化为“题干id-选项id”组合数组提交,如[{questionid:"q101",optionid:"opt_5"}],合并至payload并post;须校验去重、选项合法性及非空,与后端约定顺序、增量更新和错误格式。

矩阵打分题(如 Likert 量表)在问卷中常以“多行 × 多列”形式出现,用户对多个题干(行)在相同选项(列)上独立打分。批量提交时关键在于:**结构化组织数据,确保后端能无歧义还原题干、选项、分值三者关系**。
明确前端数据结构设计
避免用嵌套过深或语义模糊的格式。推荐扁平化数组,每项代表一个“题干-选项”组合:
-
题干 ID(questionId):唯一标识该行题目,如
"q101" -
选项 ID(optionId):标识所选列,如
"opt_4"或直接用数值4(若后端约定列值即分数) - 原始分值(score):可选字段,当选项非纯数字或需额外校验时保留;若列就是分数(如“非常同意=5”),可省略,由 optionId 映射得出
示例数据:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const matrixData = [
{ questionId: "q101", optionId: "opt_5" },
{ questionId: "q102", optionId: "opt_3" },
{ questionId: "q103", optionId: "opt_4" }
];
构建请求 payload 并发送
将矩阵数据与其他问卷字段(如问卷ID、用户ID)合并为统一对象,使用 fetch 或 axios 提交:
- 用
POST方法,Content-Type: application/json - 确保所有必填题干都有对应记录(空题可传
null或 omit,依后端约定) - 如有未打分题,可显式标记
score: null,避免后端误判为漏答
const payload = {
surveyId: "svy_2024_abc",
userId: "usr_789",
answers: matrixData, // 直接传上面的数组
timestamp: Date.now()
};
fetch("/api/submit", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
});
处理常见边界情况
真实场景中需主动防御异常输入:
-
重复题干:提交前用
Map或filter去重,防止用户多次点击导致重复提交 -
非法 optionId:前端校验是否在预设选项范围内(如
["opt_1","opt_2",...,"opt_5"]),不合法则提示而非静默丢弃 -
空矩阵:检查
matrixData.length === 0,给出友好提示(如“请至少完成一项评分”)
与后端约定保持一致
前端逻辑依赖后端接口定义。务必确认:
- 后端是否要求按题干顺序提交(影响排序逻辑)
- 是否支持部分提交(如只改某几行)——此时可用
patch+ 题干 ID 做增量更新 - 错误响应格式:例如返回
{ code: 400, errors: [{ questionId: "q102", message: "选项无效" }] },前端据此高亮对应行
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










