Json scormapi中的异步Ajax调用
我正在为SCORM 2004第4版创建一个javascript API。对于那些不了解SCORM的人来说,它基本上是一种API标准,在线学习课程可以使用它与LMS(学习管理系统)进行通信。现在,API必须具有以下方法:Json scormapi中的异步Ajax调用,json,asynchronous,jquery,scorm,Json,Asynchronous,Jquery,Scorm,我正在为SCORM 2004第4版创建一个javascript API。对于那些不了解SCORM的人来说,它基本上是一种API标准,在线学习课程可以使用它与LMS(学习管理系统)进行通信。现在,API必须具有以下方法: 初始化(args) GetValue(键) 设置值(键、值) 终止(args) 提交(args) GetDiagnostic(args) GetErrorString(args) GetLastError() 现在必须先调用Initialize,然后才调用Terminate。
- 初始化(args)
- GetValue(键)
- 设置值(键、值)
- 终止(args)
- 提交(args)
- GetDiagnostic(args)
- GetErrorString(args)
- GetLastError()
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
}
有人有什么想法吗?我会非常感激的 我们解决这个问题的方法是在SCO启动时将CMI数据排入API队列。我们首先导航到一个将CMI数据加载到API队列的启动页面,然后laucnch页面实际启动SCO。当SCO调用initialize时,我们只是将数据移动到CMI中。您已经很好地阐述了这个问题。SCO调用初始化后,CMI数据需要立即可用,以便SCO进行后续GetValue调用。但是,不建议进行同步AJAX调用,如果请求中出现挂起,它可以锁定整个浏览器,直到请求返回或超时。解决方案是在加载SCO之前预加载所有必需的数据。在我们的示例中,我们在播放器启动时预加载所有数据(CMI和序列),然后在学习者完成课程时使用后台进程定期提交脏数据。在处理可能的窗口启动和退出场景组合时,要确保所有数据正确持久化可能会有点棘手,但这当然是可能的。您将希望避免从SCORM API调用中向服务器发出任何请求,因为SCO通常会大量调用LMS。在这些调用中发出服务器请求会严重降低学习者的体验,并给服务器带来性能负担 迈克