我们目前面临实施SCORM LMS系统的设计问题。例如,API定义了一个函数LMSCommit,它必须返回' true'或者' false'。在该方法中,我们的LMS必须使用包含其参数中的成功或失败消息的回调函数对服务器端服务进行异步调用。 我们声称,这根本不可能!然而,我们认为值得向一些专业人士询问我们是否遗漏了这些东西。
SCO(对我们没有影响)调用这样的方法:
var result = LMSCommit('');
我们的LMS(对我们的影响)我们实现了这样的事情:
function LMSCommit(useless) {
callOurServiceFunction(function(Status) {
// what am I supposed to do here in order to put status into
// the return value of the outer function???
}
// fake true as the callourServiceFunction returned immediatly,
// no idea how I can use Status to create a return value
return 'true';
}
我们在这里是否遗漏了一些奇特的伎俩,或者SCORM标准只是"有争议的"?
答案 0 :(得分:7)
它通常使用异步代码实现,其中包含相当无价值的" true"返回值。这是SCORM课程开发人员所熟知的,他们已经学会了不依赖于Commit返回值来处理任何重要的事情。在这种情况下,所有返回值均表示已触发ajax请求。
如果您使用同步方法实施提交,则在等待返回值时,课程将显得滞后并停顿,这将保证大量投诉并声称您的SCORM引擎已损坏。
对于穿着你鞋子的人来说非常令人沮丧,但不幸的是,你真的无能为力。
那些不熟悉SCORM的人的背景知识:
SCORM是规范的汇编,而不是真正的标准,在2004年收到了它的最后一次重大更新。(从那时起的更新很小,没有重大的架构变化。)这意味着它已经十年了。 SCORM 1.2甚至更老了。 ADL已经宣布他们不会再更新SCORM了 - 正如他们所说,盖子已关闭。
为了正确看待,当IE6是主流浏览器,谷歌Chrome和iPhone不存在,雅虎和RealPlayer相关,Facebook是一个宿舍室项目,每个人我认为Adobe Flex和RIA是未来的发展方向。现在这是一个不同的世界......如果他们重新开始,我相信他们会走另一条路。这就是xAPI(又名Tin Can)的选择;它使用不同的通信模型(RESTful API),可用于替换支持xAPI的LMS中的SCORM。 (注意xAPI尚未得到广泛支持。)
xAPI链接是否有人对此感兴趣:
答案 1 :(得分:1)
我不得不写出一个AJAX队列系统,因为我试图保持异步调用,直到浏览器退出并切换到同步。
但是您有几种情况需要检查 -
现在记住HTTP请求变得棘手。过去提交呼叫可以晚于当前提交到达。我给我的时间戳,所以我不会发生碰撞。此队列允许我按顺序提交,因为您不希望先前的Commit垃圾邮件在退出后到达,从而覆盖cmi.exit,任何事情都会看到发生在那些毫秒/秒内。
有LMS在那里以非缓存方式运行。曾经/设置是到服务器的往返。因此,您看到每个请求的延迟时间为50-400ms,这相当于学生卡住用户体验3-6秒。
如果您已缓存学生尝试并且只是提交,那么您的发送将5-12KB的数据发送到服务器。如果你采用了缓存混合方法,你唯一的发送方式会发生变化。
这一切都与电源断电,互联网连接丢失以及您希望运行时的行为方式一致。
所以根据上面的'list',如果我能够将它添加到队列中,我会回复'true',如果它符合任何其他标准'false'。
GL, 标记