私はSCORM 2004 4th Edition用のjavascript APIを作成しています。 SCORMについて知らない人にとっては、基本的に、eラーニングコースがLMS(Learning Management System)と通信するために使用できるAPI標準です。SCORM APIの非同期Ajax呼び出し
- 初期化(引数)(キー)
- のSetValue
- GetValueメソッド(キー、値)
- 終了(引数)
- コミット(引数):今、APIには、以下の方法を有することがあります
- GetDiagnostic(引数)
- は、getErrorString(引数)
- のGetLastError()
ここでInitializeを呼び出す前に、Terminateを最後に呼び出す必要があります。 GetValue/SetValueは、その間のどこでも呼び出すことができます。私がやっているのは、Initializeメソッドです。WebサービスからJSONを取得し、APIに保存しています(GetValue/SetValueメソッドを使用するときに使用します)。私が遭遇する問題は、jQuery経由のAJAX呼び出しが非同期であるため、JSONがロードされる前にInitializeメソッド呼び出しを実行できることです。これがそのままでは、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
}
誰にもアイデアはありますか?とても感謝しております!