
本文介绍如何将多个独立的 jspsych 实验(如主实验和已封装好的 digit span 实验)无缝串联运行,避免代码重复,同时保留各自完整的时间线数据;推荐使用 jatos 平台实现模块化实验编排。
本文介绍如何将多个独立的 jspsych 实验(如主实验和已封装好的 digit span 实验)无缝串联运行,避免代码重复,同时保留各自完整的时间线数据;推荐使用 jatos 平台实现模块化实验编排。
在 jsPsych 开发实践中,常需将多个行为实验(如 Stroop、n-back、Digit Span 等)按顺序呈现给被试,且要求每个实验保持独立开发、独立调试、独立记录 timeline 数据。直接合并 JavaScript 文件或手动拼接 timelines 不仅易出错,还会破坏实验模块的可复用性与可维护性。此时,JATOS(Just Another Tool for Online Studies) 是目前最成熟、最推荐的解决方案。
JATOS 将每个实验视为一个独立的“组件(Component)”,每个组件本质上是一个完整的、自包含的网页(含 HTML、JS、CSS 及资源文件)。你无需修改原有实验代码逻辑,只需进行轻量适配,即可将其作为独立组件接入同一研究流程中。
✅ 操作步骤简明如下:
-
准备两个实验目录
-
main/:你的主实验(含experiment.js、index.html等) -
digit-span/:已写好的 Digit Span 实验(含其 ownindex.html和digit-span.js)
-
为每个实验添加 JATOS 兼容初始化
在每个实验的入口 JS 文件(如experiment.js或digit-span.js)末尾,添加如下标准启动逻辑:
// 启动 jsPsych 实验(保持原有逻辑不变)
jsPsych.init({
timeline: timeline,
on_finish: function() {
// ✅ 关键:通知 JATOS 当前组件已完成
if (typeof jatos !== 'undefined' && jatos.startNextComponent) {
jatos.startNextComponent();
}
}
});
⚠️ 注意:
jatos.startNextComponent()仅在 JATOS 环境中有效;本地直接打开 HTML 文件时会静默忽略,不影响独立调试。
-
上传并配置 JATOS Study
- 登录 JATOS(本地部署或 jatos.org 托管版)
- 创建新 Study → 添加两个 Components:
- Component 1:选择
main/目录(设为起始组件) - Component 2:选择
digit-span/目录
- Component 1:选择
- 设置 Component 1 的 Next component 为 Component 2(JATOS 自动注入
jatos.startNextComponent()调用)
数据导出与 timeline 分离
JATOS 会为每个 Component 单独保存结果(JSON 格式),包括完整的timeline、responses、timing_*等字段。你可在后台下载component_1_result.json和component_2_result.json,确保两个实验的数据完全隔离、时间线完整、无交叉污染。
? 为什么不用 jspsych-external-html?
该插件仅支持加载静态 HTML 片段,无法执行 <script></script> 中定义的 jsPsych 实例(因 DOM 加载后脚本未重执行,且 jsPsych 全局状态冲突),也不支持跨页面传递实验控制流。而 JATOS 提供了标准化的组件生命周期管理(onLoad, onUnload, startNextComponent),天然适配多阶段实验范式。
? 进阶提示:
- 若需传递参数(如被试 ID、随机种子)至下一实验,可利用
jatos.addResultData()+jatos.getResultData()实现组件间轻量通信; - 支持条件跳转(如根据主实验表现决定是否运行 Digit Span),通过
jatos.submitResult()返回状态后,在 JATOS 后端逻辑中动态路由。
综上,JATOS 不仅解决了“无缝串联”的技术痛点,更提升了实验工程化水平——每个实验可独立版本管理、AB 测试、灰度发布,是构建可扩展在线认知实验平台的事实标准。











