我正在为 SCORM 2004 第 4 版创建一个 javascript API。对于那些不了解 SCORM 的人来说,基本上它是一个 API 标准,电子学习课程可以使用它与 LMS(学习管理系统)进行通信。现在 API 必须具有以下方法:
- 初始化(参数)
- 获取值(键)
- 设置值(键,值)
- 终止(参数)
- 提交(参数)
- 获取诊断(参数)
- 获取错误字符串(参数)
- 获取上一个错误()
现在 Initialize 必须在其他任何事情之前调用,并且 Terminate 必须在最后。GetValue/SetValue 可以在两者之间的任何地方调用。我正在做的是在 Initialize 方法中,我从 Web 服务获取一些 JSON 并将其存储在 API 中(稍后在使用 GetValue/SetValue 方法时使用)。我遇到的问题是通过 jQuery 的 AJAX 调用是异步的,因此可以在加载 JSON 之前完成 Initialize 方法调用。既然这样,在调用 Initialize 之后调用 GetValue 可能会导致意外问题,因为 GetValue 使用的 JSON 尚不存在。我的问题是:如何确保在调用 GetValue/SetValue 方法之前加载 JSON?我知道简单的答案是让它同步,但大多数情况下不建议这样做,而且它没有 t 似乎想为我做那件事。这是我的代码:
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
}
有没有人有任何想法?我真的很感激!