我正在为SCORM 2004第4版创建一个JavaScript API。对于那些不了解SCORM的人,基本上它是电子教学课程可以用来与LMS(学习管理系统)进行交流的API标准。现在API必须具有以下的方法:SCORM API中的异步Ajax调用
- 初始化(参数)
- 的GetValue(键)
- 的SetValue(键,值)
- 终止(参数)
- 提交(参数)
- GetDiagnostic(参数)
- GetErrorString(参数)
- GetLastError函数()
现在Initialize必须在其他任何事情之前被调用,并且Terminate必须是最后一个。可以在这之间的任何地方调用GetValue/SetValue。我正在做的是在Initialize方法中,我从Web服务获取一些JSON并将其存储在API中(稍后使用GetValue/SetValue方法时使用)。我碰到的问题是,通过jQuery的AJAX调用是异步的,所以Initialize方法调用可以在加载JSON之前完成。通过这种方式,在调用Initialize之后调用GetValue可能会导致意外问题,因为GetValue使用的JSON尚未出现。我的问题是:我能做些什么来确保在调用GetValue/SetValue方法之前加载JSON?我知道简单的答案是使它同步,但这并不是建议大多数,它似乎并不想为我这样做。这里是我的代码:
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
}
有没有人有任何想法?我真的很感激!