11

SCORM 20044thEdition用のJavaScriptAPIを作成しています。SCORMについて知らない人のために、基本的にはeラーニングコースがLMS(学習管理システム)と通信するために使用できるAPI標準です。ここで、APIには次のメソッドが必要です。

  • Initialize(args)
  • GetValue(key)
  • SetValue(key、value)
  • 終了(args)
  • Commit(args)
  • GetDiagnostic(args)
  • GetErrorString(args)
  • 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
}

誰かアイデアはありますか?とても感謝しております!

4

2 に答える 2

10

あなたは問題をうまく表現しました。SCOがInitializeを呼び出した後、SCOが後続のGetValue呼び出しを行うために、CMIデータをすぐに利用できるようにする必要があります。ただし、同期AJAX呼び出しを行うことはお勧めしません。リクエストにハングアップがあると、リクエストが返されるかタイムアウトになるまでブラウザ全体がロックされる可能性があります。解決策は、SCOがロードされる前に、必要なすべてのデータをプリロードすることです。SCORMエンジンの実装では、プレーヤーの起動時にすべてのデータ(CMIとシーケンス)をプリロードし、バックグラウンドプロセスを使用して、学習者がコースを進むにつれてダーティデータを定期的にコミットします。考えられるウィンドウの起動と終了のシナリオの組み合わせを処理するときに、すべてのデータが適切に永続化されるようにするのは少し難しいかもしれませんが、それは確かに可能です。SCOはLMSを大量の呼び出しで溢れさせることが多いため、SCORMAPI呼び出し内からのサーバーへの要求は避けたいと思うでしょう。これらの呼び出し内でサーバー要求を行うと、学習者のエクスペリエンスが大幅に低下し、サーバーにパフォーマンスの負担がかかる可能性があります。

マイク

于 2009-08-27T15:51:33.560 に答える
0

この問題に取り組む方法は、SCOの起動時にAPIでCMIデータをキューに入れることでした。最初に、CMIデータをAPIのキューにロードする起動ページに移動し、次に、laucnchページが実際にSCOを起動します。SCO呼び出しが初期化されると、データをCMIに移動するだけです。

于 2009-08-12T13:21:09.780 に答える