使用先前试验的用户输入作为新试验的刺激

Use user input from previous trial as stimulus in a new trial

我正在尝试使用 JavaScript 包 JSPsych 编写一个实验。我的实验的 MWE 应该执行以下操作:参与者在调查文本试验中输入一封信,在接下来的 html 响应试验中,这封信应该作为刺激呈现给参与者。

我的问题是我无法找到访问参与者在调查文本试验中的输入的方法。我的程序结构遵循 JSPsych 网站上的反应时间教程:试验被一个接一个地创建并推入一个 timeline 数组,该数组在代码的末尾启动。这意味着在定义试用版时用户尚未输入任何内容。

我的 MLE 代码可以在下面找到。当 运行 在浏览器中进行实验时,我可以使用 JSON.parse(jsPsych.data.getLastTrialData().select('responses').values).favorite 从调查文本试验中访问数据。但是,在下面的代码中,这会产生以下错误:SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data,因为(我强烈推测)在编译代码时没有最后一次试验。

let letter_display, letter_survey, test_procedure, timeline;
timeline = [];

letter_survey = {
    type: "survey-text",
    questions: [
        {prompt: "What is your favorite letter?", name:"favorite"}
                    ],
        }
timeline.push(letter_survey);

letter_display = {
    type: 'html-keyboard-response',
    stimulus: jsPsych.timelineVariable('stimulus'),
};

test_procedure = {
    timeline: [letter_display],
    timeline_variables: [{type:'html-keyboard-response', stimulus: JSON.parse(jsPsych.data.getLastTrialData().select('responses').values).favorite}]
};
timeline.push(test_procedure);

jsPsych.init({
    timeline: timeline
})

我找到了解决办法。将值分配给 letter_display 变量的代码部分必须更改如下:

letter_display = {
    type: 'html-keyboard-response',
    stimulus: JSON.parse(jsPsych.data.getLastTrialData().select('responses').values).favorite
};
timeline.push(letter_display);

所有与 test_procedure 变量相关的代码都可以 删除

即我让这个适用于“平面”时间线,但不适用于嵌套时间线。如果有人有嵌套的时间线解决方案,如果他们将其作为答案发布在这里,我将不胜感激。

附带说明:使用 JSON.parse(jsPsych.data.get().filter( {trial_type: 'survey-text'} ).select('responses').values).favorite 可以概括为用户输入不是来自上次试验的情况。

我再补充一下

试用的on_start也可以!它可以根据最后一次试验的反应改变试验的刺激或任何参数。

letter_display = {
    type: 'html-keyboard-response',
    stimulus:''
    on_start:function(trial){
       trial.stimulus =jsPsych.data.getLastTrialData().select('responses').values.favorite
    }
};
timeline.push(letter_display);

(如果你在on_start之前不分配stimulus,它可以工作,但在控制台有错误信息)