title: Asynchronous Ajax call in SCORM API
body: <p>I am creating a javascript API for SCORM 2004 4th Edition.  For those who don't know about SCORM, basically it is an API standard that eLearning courses can use to communicate with an LMS (Learning Management System).  Now the API has to have the following method:</p>
  
  <ul>
  <li>Initialize(args)</li>
  <li>GetValue(key)</li>
  <li>SetValue(key, value)</li>
  <li>Terminate(args)</li>
  <li>Commit(args)</li>
  <li>GetDiagnostic(args)</li>
  <li>GetErrorString(args)</li>
  <li>GetLastError()</li>
  </ul>
  
  <p>Now Initialize has to be called before anything else, and Terminate must the last.  GetValue/SetValue can be called anywhere in between there.  What I am doing is in the Initialize method I am getting some JSON from a web service and storing that in the API (to be used when using the GetValue/SetValue methods later).  The problem I am coming across is that the AJAX call via jQuery is asynchronous, so the Initialize method call could be done before the JSON is loaded.  With that being the way it is, a call to GetValue after calling Initialize could cause unexpected issues b/c the JSON that GetValue uses isn't there yet.  My question is this: What can I do to ensure that the JSON is loaded before the GetValue/SetValue methods are called?  I know the simple answer is to make it synchronous, but that is not advised mostly, and it doesn't seem to want to do that for me.  Here is my code regarding that:</p>
  
  <pre><code>function GetJSON(){
     var success = false;
     $.ajaxSetup({async:false}); //should make it synchronous
     $.getJSON("http://www.mydomain.com/webservices/scorm.asmx/SCORMInitialize?
                learnerID=34&amp;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
  }
  </code></pre>
  
  <p>Does anyone have any ideas?  I would really appreciate it!</p>