使用先前试验的用户输入作为新试验的刺激
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
,它可以工作,但在控制台有错误信息)
我正在尝试使用 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
,它可以工作,但在控制台有错误信息)