首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TinCan/xAPI -恢复提示不工作

TinCan/xAPI -恢复提示不工作
EN

Stack Overflow用户
提问于 2015-01-21 19:31:30
回答 1查看 922关注 0票数 1

我已经在ColdFusion中构建了自己的简单LMS。它只是使用iframe来显示课程,并且有一页记录了tin can语句。它工作完美,但我有一个课程设计在工作室‘13/演讲者'13,输出是tincan,简历功能不工作在我的LMS。

如果我使用presentation.html,例如

代码语言:javascript
复制
https://www.domainname.com/folder/courses/example_course/presentation.html?&actor={"name":["My_Name"],"mbox":["mailto:email@email.com"],"objectType":["Agent"]}&endpoint=https://www.domainname.com/folder/courses/&course_id=5&uuid=9AE6DEA4-9C19-F477-19B9822F1E2F0722&registration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=

简历不起作用,但是tincan声明正确地张贴到我的网站上。

如果我使用presentation_html5.html,例如

代码语言:javascript
复制
https://www.domainname.com/folder/courses/example_course/presentation_html5.html?&actor={"name":["My_Name"],"mbox":["mailto:email@email.com"],"objectType":["Agent"]}&endpoint=https://www.domainname.com/folder/courses/&course_id=5&uuid=9AE6DEA4-9C19-F477-19B9822F1E2F0722&registration=36fc1ee0-2849-4bb9-b697-71cd4cad1b6e&activity_id=https://www.domainname.com/folder/courses/&auth=Basic TG9naW46UGFzc3dvcmQ=

简历确实有用,但tincan的声明没有发布。

我遵循了本教程并设置了简历功能:http://www.articulate.com/support/presenter-09/enabling-and-disabling-the-prompt-to-resume-function

我在几个不同的服务器上,在几个不同的浏览器(IE 11,FF 34.0.5,Chrome 39.0.2171.95m)上尝试了这个课程,这是Flash的最新版本。

简历功能不起作用。

我已经尝试了所有不同的选项,提示等课程,闪存饼干启用和禁用。

简历功能不起作用。

我在Scorm上试过这个课程。简历功能有效!我已经在我的电脑上用presentation.html打开了FireFox。简历功能正常工作。

我已经把这个问题缩小到TinCan了。如果我通过更改TinCan文件关闭presentation.html文件

代码语言:javascript
复制
var g_bTinCan = true; to var g_bTinCan = false;

课程按应有的方式继续进行。但是由于TinCan关闭了,所以它不会向我的LMS发布任何声明。

我已经发现,我可能需要用状态/恢复数据来响应POST state?method=GET。所以像这样的事情

1Nk30a010904050607080b0on1001811f016110171101811000 (告诉课程去幻灯片4或诸如此类的东西)。

我知道数据是编码/压缩的。这些数据实际上来自发送到LMS的状态数据。每一张幻灯片都张贴一个简历点。我猜我只需要从上一次会议中获取简历点数据,当用户恢复课程,tincan要求提供简历数据时,我需要回发。

但出于某种原因,无论我返回了什么,如何回报它。我的课程就坐在那里装货。所有的东西都在那里,导航栏,课程附加,退出按钮,只是内容有加载标志。没有东西是可点击的。

我试着回发scorm云在ColdFusion中使用的类似头:

代码语言:javascript
复制
Access-Control-Allow-Header: Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through
Access-Control-Allow-Origin: *
Access-Control-Expose-Header: ETag,Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through
Cache-Control: no-cache
Connection: keep-alive
Content-Type: application/json
X-Experience-API-Version: 1.0.0
access-control-allow-methods: HEAD,GET,POST,PUT,DELETE

它们与响应: 1Nk30a010904050607080b0on1001811f016110171101811000一起正确地通过。

我尝试了返回格式,如json、纯文本、数组。但这条路没有负荷。我还发现了奇怪的行为,如果我刷新,然后立即停止浏览器(课程永远不会刷新)。它将打开简历提示,然后我可以单击“是/否”。而且它是有效的。显然这不对。

有什么想法吗?我遗漏了什么?我正在寻找一门清晰的课程,当它要求state?method=GET上的简历点时,它将作为我(或任何) LMS/LRS的回应。

编辑

@Brian:内容类型为application/json

LRS应该在接收到时返回内容类型,这是它变得棘手的地方。state?method=GET重定向到cfc函数。../includes/LRSCFC.cfc?method=GetState&returnFormat=plain

这是一项功能:

代码语言:javascript
复制
<cfheader name="Access-Control-Allow-Header" value="Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Access-Control-Allow-Origin" value="*">
<cfheader name="Access-Control-Expose-Header" value="Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Cache-Control" value="no-cache">
<cfheader name="Connection" value="keep-alive">
<cfheader name="Content-Type" value="application/json">
<cfheader name="X-Experience-API-Version" value="1.0.0">
<cfheader name="access-control-allow-methods" value="HEAD,GET,POST,PUT,DELETE">
<cfreturn '1s43040ji1001111a0101101111000'>

问题是,如果告诉CF使用函数returnFormat=json或serializeJSON()作为json返回。它向返回的数据添加内容。

上述代码将返回:

代码语言:javascript
复制
1s43040ji1001111a0101101111000

告诉CF使用json:

代码语言:javascript
复制
//"1s43040ji1001111a0101101111000"

这是CF的一个安全特性。

但让我困惑的是Scorm刚刚回来

代码语言:javascript
复制
1s43040ji1001111a0101101111000

它的格式不像JSON。尽管内容类型是application/json,但它似乎是纯文本。

如果我返回所有cfheader信息,但留下course空白course“,则课程就像我返回的”1s43040ji1001111a010110111000“一样。”

代码语言:javascript
复制
1s43040ji1001111a0101101111000 - Should jump the user to slide 3.

您返回的是什么状态代码? 200确定

任何其他状态,该课程将播放,但会抱怨它无法连接到服务器。

@Andrew

是否有任何错误、成功和要求正在进行中?没有错误。似乎一切都很成功。没有进行中的请求。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-28 19:13:11

我解决了我的问题。我在标题中缺少了Content-Length。内容长度只是响应数据的长度。所以我补充说:

代码语言:javascript
复制
<cfheader name="Content-Length" value="#len('1s43040ji1001111a0101101111000')#">

到我当前的代码中,如下所示:

代码语言:javascript
复制
<cfheader name="Access-Control-Allow-Header" value="Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Access-Control-Allow-Origin" value="*">
<cfheader name="Access-Control-Expose-Header" value="Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through">
<cfheader name="Cache-Control" value="no-cache">
<cfheader name="Connection" value="keep-alive">
<cfheader name="Content-Type" value="application/json">
<cfheader name="X-Experience-API-Version" value="1.0.0">
<cfheader name="access-control-allow-methods" value="HEAD,GET,POST,PUT,DELETE">
<cfheader name="Content-Length" value="#len('1s43040ji1001111a0101101111000')#">
<cfreturn '1s43040ji1001111a0101101111000'>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28075312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档