Javascript SCORM:这是向LMS提交数据的正确行为吗
我有流动的问题。我有一个服装课程,我正在建设,这是基于SCORM 2004第三版,并部署在萨巴LMS。 我正在做的是:Javascript SCORM:这是向LMS提交数据的正确行为吗,javascript,scorm,scorm2004,Javascript,Scorm,Scorm2004,我有流动的问题。我有一个服装课程,我正在建设,这是基于SCORM 2004第三版,并部署在萨巴LMS。 我正在做的是: 我使用“API.SetValue”来设置一些数据 我使用“API.Commit”将数据保存到LMS (我正在使用,但它仍在使用核心功能) 现在我为不同的数据字段做了几次,让我们称它们为“X”、“Y”和“Z” 我所期望的是在向服务器发出第一个请求时,只看到正在发送的“X”,这正是我所看到的。然后在第二天,我希望只看到“Y”,但我不明白的是,我看到API同时发送“X”和“Y”。
有谁能向我解释这是SCORM的问题、我正在使用的特定LMS(SABA)还是我做错了什么?这不是SCORM的问题。SCORM只是告诉您API—GetValue、SetValue、Commit等—以及每个调用的一般行为。但它并没有规定LMS实际上是如何做这些事情的。LMS似乎正在客户端保存数据。因此,当设置X时,它会将其保存在本地。当您调用Commit时,LMS获取所有的数据客户端并将其发送回服务器。稍后,当您设置Y和Z时,它会执行相同的操作—获取所有数据并发送回LMS
除了让LMS改变它的行为,我认为你真的没有办法。我遵循的经验法则是,只有在你真正需要的时候才承诺。您可以只调用X、Y和Z的SetValue,然后仅在转到另一个SCO或到达您决定必须将此数据保存到LMS的点时提交。这不是SCORM的事情。SCORM只是告诉您API—GetValue、SetValue、Commit等—以及每个调用的一般行为。但它并没有规定LMS实际上是如何做这些事情的。LMS似乎正在客户端保存数据。因此,当设置X时,它会将其保存在本地。当您调用Commit时,LMS获取所有的数据客户端并将其发送回服务器。稍后,当您设置Y和Z时,它会执行相同的操作—获取所有数据并发送回LMS
除了让LMS改变它的行为,我认为你真的没有办法。我遵循的经验法则是,只有在你真正需要的时候才承诺。您可以只调用X、Y和Z的SetValue,然后仅在转到另一个SCO或到达您决定必须将此数据保存到LMS的点时提交。首先,我想说您没有做错什么,这完全是API的错-这是我今天遇到的第二个API(巧合lol)做坏事: 有好的实践和想法,也有不好的——不幸的是,不好的实践和想法编写代码要快得多,所以人们在编写客户端API时往往不会考虑这些事情
- 做事情最简单也是最糟糕的(字面上)方法是简单地设置单个对象中的所有数据,并在调用Commit时发送整个对象
- 对此的一个改进是缓存自上次提交以来已更改的键——好处是并非所有内容都会发送,缺点是不会更改的值会再次发送
- 最好的做法是缓存调用commit时发送的值,然后下次比较它们-这样只发送已更改的值
- 最后是合并上述两种方法-缓存键,以便只检查这些值,而不是每个值
- 压缩数据是值得的——zip在Javascript中很容易实现,并且会显著减少网络带宽
- 发送一个散列或幻数来验证数据也是一项要求——让服务器知道这应该设置
- 使用散列或幻数进行回复很重要,这样客户机就知道缓存需要更新(发送时更新有点安全,但不如等待回复并知道服务器与客户机匹配那样安全)
重复我的第一句话——不是你的错,完全是API的错。对其进行更改对他们来说应该很容易-在服务器端,只需支持合并而不是替换发送的数据即可。首先我想说的是,您没有做错什么,这完全是API的错-这是我今天遇到的第二个API(巧合lol)做了不好的操作: 有好的实践和想法,也有不好的——不幸的是,不好的实践和想法编写代码要快得多,所以人们在编写客户端API时往往不会考虑这些事情
- 做事情最简单也是最糟糕的(字面上)方法是简单地设置单个对象中的所有数据,并在调用Commit时发送整个对象
- 对此的一个改进是缓存自上次提交以来已更改的键——好处是并非所有内容都会发送,缺点是不会更改的值会再次发送
- 最好的做法是缓存值