Estoy creando una API de JavaScript para SCORM 2004 4th Edition. Para aquellos que no saben sobre SCORM, básicamente es un estándar API que los cursos de eLearning pueden usar para comunicarse con un LMS (Learning Management System). Ahora, la API tiene que tener el siguiente método:Llamada Asynchronous Ajax en SCORM API
- initialize (args)
- GetValue (clave)
- EstablecerValor (clave, valor)
- Terminate (args)
- Commit (args)
- GetDiagnostic (args)
- GetErrorString (args)
- GetLastError()
Ahora Initialize debe llamarse antes que cualquier otra cosa, y Terminate debe ser el último. GetValue/SetValue se puede llamar en cualquier lugar entre allí. Lo que estoy haciendo es en el método Initialize. Estoy obteniendo un JSON de un servicio web y lo estoy almacenando en la API (para usarlo luego con los métodos GetValue/SetValue). El problema con el que me estoy cruzando es que la llamada AJAX a través de jQuery es asincrónica, por lo que la llamada al método Initialize podría realizarse antes de que se cargue JSON. Siendo así, una llamada a GetValue después de llamar a Initialize podría causar problemas inesperados, porque el JSON que usa GetValue aún no está allí. Mi pregunta es esta: ¿Qué puedo hacer para asegurarme de que el JSON esté cargado antes de llamar a los métodos GetValue/SetValue? Sé que la respuesta simple es hacerlo sincrónico, pero eso no se aconseja principalmente, y no parece querer hacer eso por mí. Aquí está mi código con respecto a eso:
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
}
¿Alguien tiene alguna idea? ¡Yo realmente lo apreciaría!