0

我正在尝试使用 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
})
4

2 回答 2

0

我找到了解决方案。将值分配给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泛化到用户输入不是来自上次试验的情况。

于 2020-06-08T09:21:01.060 回答
0

让我添加另一种方式

试用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);

(如果您没有在stimulus之前分配on_start,它可以工作,但在控制台中显示错误消息)

于 2021-11-26T07:47:54.390 回答