【问题标题】:Reference Qualtrics embedded data field containing dot (.) character包含点 (.) 字符的参考 Qualtrics 嵌入数据字段
【发布时间】:2018-08-11 10:25:55
【问题描述】:

从联系人列表导入字段时,相应的嵌入数据字段包括点 (.)。例如,这是在联系人列表导入时自动创建的一个嵌入数据的名称:

result.elements.0.embeddedData.V1

在我的调查中,我想访问存储在这个嵌入数据字段中的值。但是 Qualtrics 提供的 getEmbeddedData() javascript 方法显然不喜欢点。
举个更简单的例子,我将上面嵌入的数据名称缩短为V.1

Qualtrics.SurveyEngine.getEmbeddedData('V.1'); // returns null

并返回一个空值。

如果我将嵌入的数据字段名称更改为V1(不是.),则该方法返回正确的值:

Qualtrics.SurveyEngine.getEmbeddedData('V1'); # returns correct value

如果名称中有一个点,我尝试使用\\\ 进行转义,例如:getEmbeddedData('V\\.1'),但是这两种转义样式都不起作用 - 返回了null

还有另一种使用 javascript 访问嵌入数据的语法 - "${e://Field/myfield}" 方法 - 但我需要能够动态设置最后一个字符(即 V 之后的数字),并且此方法不允许那。具体来说,对于嵌入数据V1

var ix = 1;
Qualtrics.SurveyEngine.getEmbeddedData('V'+ix); <-- this works
"${e://Field/V"+ix+"}"; <-- this doesn't work

我有超过 1000 个字段可以从此联系人列表中导入,因此我不想手动重命名每个字段以删除点。如果 Qualtrics 破坏了它自己的一种方法,它会选择这个命名模式作为导入默认值,这似乎很奇怪——我在这里做错了吗?我可以使用其他语法吗?

【问题讨论】:

    标签: javascript qualtrics


    【解决方案1】:

    我在 Qualtrics 社区回答了您的相关问题。你不能这样做"${e://Field/V"+ix+"}",因为在页面发送到浏览器之前,管道已经在服务器上解析了。

    当 Web 服务返回 json 或 xml 时,Qualtrics 默认为结构中的每个级别使用一个点。您可以通过将嵌入变量(在 Web 服务块的左侧)更改为不带点的名称来覆盖它。

    另一种选择是编写您自己的调用 Qualtrics API 的 Web 服务脚本,然后将结果放入平面 json 结构中,然后再将它们返回给您的调查。

    根据下面的 cmets 更新

    自动重命名从 Web 服务调用返回的嵌入变量 - 我认为唯一的方法是我的替代建议 - 编写自己的 Web 服务脚本,转换从 api 返回的信息并重命名变量,将它们放在一个维关联数组,然后将该数组转换为 json。

    Qualtrics Question API - getEmbeddedData() 已从文档中删除。我不知道为什么,并且必须询问 Qualtrics 支持。目前,它仍然有效。因此,如果您需要动态构造带有点的嵌入变量名称,您可以基于 getEmbeddedData() 创建自己的函数。使用浏览器的开发者工具看看它的作用。

    我发现 addEmbeddedData() 在实际操作中毫无用处。无论是否在调查流程中定义了嵌入数据字段,setEmbeddedData() 都有效。如果它是在调查流程中定义的,它会保存到响应数据中。如果未在调查流程中定义,则可以在整个当前调查响应中引用,但不会保存在响应数据中。

    【讨论】:

    • 您好,感谢您的回答。是的,我已经看到了关于服务器上正在解析的管道的其他一些 SO 答案——我只是注意到我知道这在这里不起作用。我的主要问题是如何转义 . 字符。我已经找到了一些解决方法来实际实现我的最终目标,这些也是你在这里的好主意。但是这个问题主要是关于找到正确的转义语法来正确调用这些 ED 字段。有什么想法吗?
    • 只有一个,而且不漂亮。有趣的是,getEmbeddedData 甚至不再包含在 Question API 文档中 (co1.qualtrics.com/WRAPI/QuestionAPI/classes/…)。我的一个想法是使用开发工具找到 Qualtrics getEmbeddedData JS,然后以此为基础编写自己的 getEmbeddedData 函数。
    • 有趣 - 我想知道该方法是否已被弃用?如果是这样,那就太可惜了,因为这是我能够解决无法对${e://Field/...} 语法进行客户端更新的唯一方法。 (也有点不相关:setEmbeddedData() API 文档字符串现在说“将嵌入数据设置到页面,或者如果 ED 密钥不在页面上,则添加它”......这对我来说也是新的,我认为 ED 密钥已经必须设置它才能工作。)
    • 重写getEmbeddedData() 是个好主意(虽然很艰巨)。您能否更新您的答案以提出建议并注意该方法不再在文档中?另外,关于重命名嵌入式变量名称的建议,有没有办法以编程方式做到这一点? (在我原来的帖子中,我提到我有大约 1000 个 ED 字段并且不想手动重命名。)这些点都不是问题的实际答案,但如果你可以将当前答案换成我们在 cmets 中得到的一些东西。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多