我正在爲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
}
有沒有人有任何想法?我真的很感激!