Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SCORM API提交-异步还是同步?_Javascript_Scorm - Fatal编程技术网

Javascript SCORM API提交-异步还是同步?

Javascript SCORM API提交-异步还是同步?,javascript,scorm,Javascript,Scorm,我们目前在实施SCORM LMS系统时面临一个设计问题。例如,API定义了一个函数LMSCommit,该函数必须返回“true”或“false”。在该方法中,我们的LMS必须使用参数中包含成功或失败消息的回调函数对服务器端服务进行异步调用。 我们声称,这根本不可能!然而,我们认为有必要询问一些专业人士,我们是否遗漏了一些东西 SCO(对我们没有影响)调用如下方法: var result = LMSCommit(''); function LMSCommit(useless) { callO

我们目前在实施SCORM LMS系统时面临一个设计问题。例如,API定义了一个函数LMSCommit,该函数必须返回“true”或“false”。在该方法中,我们的LMS必须使用参数中包含成功或失败消息的回调函数对服务器端服务进行异步调用。 我们声称,这根本不可能!然而,我们认为有必要询问一些专业人士,我们是否遗漏了一些东西

SCO(对我们没有影响)调用如下方法:

var result = LMSCommit('');
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';
}
我们的LMS(对我们的影响)我们实现了如下内容:

var result = LMSCommit('');
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标准只是“有争议的”?

它通常使用异步代码实现,返回一个毫无价值的“true”值。SCORM课程开发人员非常熟悉这一点,他们已经学会了在任何重要的事情上都不依赖提交返回值。在本例中,所有返回值都意味着触发了ajax请求

如果使用同步方法实现提交,则在等待返回值时,课程将出现延迟和暂停,这将导致大量投诉和声称SCORM引擎损坏

对你这样的人来说很沮丧,但不幸的是,你对此无能为力

对于那些不太熟悉SCORM的人来说,有一点背景知识:

SCORM是规范的汇编,而不是真正的标准,它的最后一次重大更新是在2004年。(从那以后的更新都很小,没有重大的架构变化。)这意味着它已经有十年的历史了。SCORM 1.2甚至更老。ADL已经宣布他们不会再更新SCORM了——正如他们所说,盖子已经关闭了

从长远来看,上一次主要的SCORM更新发布时,IE6是主流浏览器,Google Chrome和iPhone不存在,Yahoo和RealPlayer是相关的,Facebook是一个宿舍项目,每个人都认为Adobe Flex和RIA是未来的发展方向。现在是一个不同的世界。。。如果他们重新开始,我相信他们会走另一条路。这就是xAPI(又名锡罐)的作用;它使用不同的通信模型(RESTfulAPI),可以用来替换支持xAPI的LMS中的SCORM。(注意xAPI还没有得到广泛支持。)

xAPI链接,如果有人对此感兴趣:


我必须编写一个AJAX队列系统,因为我试图保持异步调用,直到浏览器退出并切换到同步

但是您有几个场景需要检查-

  • 会话是否已初始化
  • 会话结束了吗
  • “不需要争论”也就是你的“无用”评论哈哈
  • 现在,您可以计算总时间,并管理LMS(进度)等可能需要的任何其他内容。。。LMSCommit听起来像SCORM 1.2,但从内存来看,您可能不必这样做
  • 将您的学生尝试发送到服务器
  • 现在请记住,HTTP请求很棘手。过去的提交调用可能晚于当前提交。我的时间戳,这样就不会发生碰撞。此外,此队列允许我按顺序提交,因为您不希望先前的提交垃圾邮件在退出后到达,从而覆盖cmi.exit和在这些毫秒/秒内发生的任何内容

    有一些LMS以非缓存方式运行。Ever get/set是到服务器的往返过程。因此,您会看到每个请求有50-400ms的延迟,这相当于学生3-6秒的停滞用户体验

    如果您已经缓存了学生尝试,并且正在提交,那么您将向服务器发送5-12KB的数据。如果您采用了缓存混合方法,那么您只需发送更改的内容

    这一切都和断电、互联网连接中断以及您希望运行时的一般行为一致

    因此,根据上面的“列表”,如果我能够将其添加到队列中,我将响应“true”,如果它满足任何其他条件“false”

    德国劳埃德船级社,
    Mark

    看起来像是“SCO”假设您的函数是同步的,尽管它不是。有没有可能更改代码?为什么必须进行异步调用?因为用于与后端服务器协作的API只支持异步调用…如果您遇到SCORM问题,并且从@pipwerks得到答案,请使用它。他是JS SCORM的人!