首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCORM中的异步Ajax调用

SCORM中的异步Ajax调用
EN

Stack Overflow用户
提问于 2009-08-07 21:07:20
回答 2查看 5.2K关注 0票数 11

我正在为SCORM 2004第4版创建一个javascript。对于那些不知道SCORM的人来说,它基本上是一个eLearning课程可以用来与学习管理系统( LMS )通信的API标准。现在,API必须有以下方法:

  • 初始化(Args)
  • GetValue(key)
  • SetValue(键,值)
  • 终止(Args)
  • 承诺(Args)
  • GetDiagnostic(args)
  • GetErrorString(args)
  • GetLastError()

现在,必须先调用Initialize,最后才必须终止。GetValue/SetValue可以在那里之间的任何地方调用。我所做的是在Initialize方法中,从web服务中获取一些JSON,并将其存储在API中(稍后使用GetValue/SetValue方法时使用)。我遇到的问题是,通过jQuery进行的AJAX调用是异步的,因此可以在加载JSON之前完成初始化方法调用。这样,调用Initialize之后对GetValue的调用可能会导致意想不到的问题-- GetValue使用的JSON还没有出现。我的问题是:如何确保在调用GetValue/SetValue方法之前加载JSON?我知道简单的答案是让它同步,但这不是大多数建议,而且它似乎不想为我这样做。以下是我的代码:

代码语言:javascript
复制
function GetJSON(){
   var success = false;
   $.ajaxSetup({async:false}); //should make it synchronous
   $.getJSON("http://www.mydomain.com/webservices/scorm.asmx/SCORMInitialize?
              learnerID=34&jsoncallback=?",
             function(data){
                bind(data);
                success = true;
              }
   );   
   return success;
}

function bind(data){
   this.cmi = eval("(" + data.d + ")");
   $.ajaxSetup({async:true});  //should make it asynchronous again
}

有人有什么想法吗?我会很感激的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-27 15:51:33

你把问题说得很清楚。上海合作组织调用Initialize后,需要立即提供CMI数据,以便SCO进行后续的GetValue调用。但是,不建议进行同步AJAX调用,如果请求中出现挂起,它可以锁定整个浏览器,直到请求返回或超时为止。解决方案是在上海合作组织加载之前预先加载所有所需的数据.在我们的SCORM引擎的实现中,我们在播放器启动时预加载所有数据(CMI和序列),然后使用后台进程在学习者完成课程时定期提交脏数据。在处理可能的窗口启动和退出场景的组合时,确保所有数据都被正确地持久化可能会变得有点棘手,但这当然是可能的。您将希望避免SCORM调用中对服务器的任何请求,因为SCO通常会大量调用LMS。在这些调用中发出服务器请求会严重降低学习者的体验,并给服务器带来性能负担。

麦克

票数 11
EN

Stack Overflow用户

发布于 2009-08-12 13:21:09

当上海合作组织启动时,我们处理这个问题的方法是在API中排队处理CMI数据。我们首先导航到一个启动页面,该页面将CMI数据加载到API的队列中,然后laucnch页面实际启动SCO。当上海合作组织呼吁非关税化时,我们只需将数据移动到CMI中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1247022

复制
相关文章

相似问题

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