You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Qualtrics中使用JavaScript实现基于聚类分类的配额功能

嗨,这个需求我之前接触过类似的场景,用JavaScript来实现聚类类别的配额控制其实核心思路很清晰——就是维护一个配额计数器,再结合你已经做好的聚类规则来做校验。下面给你一步步拆解具体实现方案和代码示例:

核心逻辑梳理
  1. 把你通过聚类得到的7个类别规则,转化成可执行的JS判断逻辑(将24个人口统计问题的答案组合映射到对应的类别ID)
  2. 为每个聚类类别设置配额上限(比如每个类别最多允许多少受访者)
  3. 维护一个实时更新的配额计数器,记录每个类别已经收集的受访者数量
  4. 用户提交问卷前,先判断他属于哪个聚类类别,再检查该类别的剩余配额:有配额就允许提交并更新计数器,没有就提示用户无法提交
具体实现步骤

1. 封装聚类类别判断函数

把你之前聚类分析得到的规则,写成一个JS函数,输入用户的24个人口统计答案,输出对应的聚类类别ID。这里用简化示例,你需要替换成自己的真实聚类规则:

// 输入:包含24个人口统计问题答案的对象
// 输出:对应的聚类类别ID
function getClusterCategory(userResponses) {
  // 示例规则:根据年龄和城市规模判断类别
  if (userResponses.ageRange === "18-24" && userResponses.cityScale === "超大城市") {
    return "cluster_1";
  } else if (userResponses.ageRange === "25-34" && userResponses.householdIncome === "中等收入") {
    return "cluster_2";
  }
  // ... 依次补充剩下5个类别的判断逻辑
  return "cluster_7"; // 默认兜底类别
}

2. 定义配额配置与计数器

设置每个类别的配额上限,同时实现计数器的读写逻辑(正式环境建议用后端存储,这里先用前端localStorage做演示):

// 每个聚类类别的配额上限(可根据需求调整)
const QUOTA_CONFIG = {
  cluster_1: 50,
  cluster_2: 40,
  cluster_3: 60,
  cluster_4: 35,
  cluster_5: 45,
  cluster_6: 55,
  cluster_7: 30
};

// 读取当前配额计数(从localStorage加载,没有则初始化)
function getQuotaCounter() {
  const storedData = localStorage.getItem("survey_quota_counter");
  return storedData ? JSON.parse(storedData) : {
    cluster_1: 0, cluster_2: 0, cluster_3: 0,
    cluster_4: 0, cluster_5: 0, cluster_6: 0, cluster_7: 0
  };
}

// 更新配额计数(提交成功后调用)
function updateQuotaCounter(category) {
  const counter = getQuotaCounter();
  counter[category] += 1;
  localStorage.setItem("survey_quota_counter", JSON.stringify(counter));
}

// 检查对应类别是否还有剩余配额
function checkQuotaAvailability(category) {
  const counter = getQuotaCounter();
  return counter[category] < QUOTA_CONFIG[category];
}

3. 问卷提交的配额校验逻辑

在用户提交问卷时,先执行配额校验,再决定是否允许提交:

// 绑定表单提交事件
document.getElementById("survey-form").addEventListener("submit", handleSubmit);

function handleSubmit(event) {
  event.preventDefault(); // 阻止默认表单提交

  // 收集用户的24个人口统计答案(示例,根据你的表单结构调整)
  const userResponses = {
    ageRange: document.getElementById("age-range").value,
    gender: document.getElementById("gender").value,
    cityScale: document.getElementById("city-scale").value,
    householdIncome: document.getElementById("household-income").value,
    // ... 补充其他20个问题的答案收集
  };

  // 1. 判断用户所属聚类类别
  const userCluster = getClusterCategory(userResponses);

  // 2. 检查配额是否充足
  if (!checkQuotaAvailability(userCluster)) {
    alert("很抱歉,您所属的受访者类别配额已满,无法提交问卷。");
    return;
  }

  // 3. 配额充足,执行正式提交逻辑(比如发送到后端)
  fetch("/api/submit-survey", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(userResponses)
  })
  .then(res => res.json())
  .then(data => {
    if (data.success) {
      // 提交成功后更新配额计数
      updateQuotaCounter(userCluster);
      alert("问卷提交成功!感谢您的参与。");
      // 跳转到感谢页面
      window.location.href = "/thank-you";
    } else {
      alert("提交失败,请稍后重试。");
    }
  })
  .catch(err => {
    console.error("提交出错:", err);
    alert("提交出错,请稍后重试。");
  });
}
生产环境优化建议
  • 后端存储配额计数器:前端localStorage容易被篡改,正式环境必须把配额的校验、计数逻辑放在后端接口中,前端只负责传递用户答案,由后端完成所有判断和更新。
  • 前置配额校验:可以在用户填写完人口统计问题后就触发类别判断和配额检查,避免用户填完整个问卷才发现配额已满。
  • 聚类规则自动化:如果聚类规则复杂,可以用训练好的机器学习模型(比如用TensorFlow.js)直接加载预测,替代手写的if-else判断。
  • 配额告警机制:设置阈值(比如某个类别配额达到90%),触发邮件/消息通知管理员,方便及时调整配额。

内容的提问来源于stack exchange,提问作者sayash kapoor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:31:46