Я создаю API JavaScript для SCORM 2004, 4-е издание. Для тех, кто не знает о SCORM, в основном это стандарт API, который курсы eLearning могут использовать для общения с LMS (система управления обучением). Теперь API должен иметь следующий метод:
- Initialize (арг)
- ПолучитьЗначение (ключ)
- SetValue (ключ, значение)
- Terminate (арг)
- Commit (арг)
- GetDiagnostic (арг)
- GetErrorString (арг)
- GetLastError ()
Теперь Initialize должен вызываться раньше всего, а Terminate должен быть последним. GetValue / SetValue можно вызывать где угодно между ними. То, что я делаю, - это метод Initialize. Я получаю некоторый JSON из веб-службы и сохраняю его в API (который будет использоваться при использовании методов GetValue / SetValue позже). Проблема, с которой я сталкиваюсь, состоит в том, что вызов AJAX через jQuery является асинхронным, поэтому вызов метода Initialize может быть выполнен до загрузки JSON. При таком подходе вызов GetValue после вызова Initialize может вызвать непредвиденные проблемы, поскольку JSON, который использует GetValue, еще не создан. У меня такой вопрос: что я могу сделать, чтобы убедиться, что JSON загружен до вызова методов GetValue / SetValue? Я знаю, что простой ответ - сделать это синхронно, но в основном это не рекомендуется, и, похоже, он не хочет делать это для меня. Вот мой код относительно этого:
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
}
У кого-нибудь есть идеи? Буду очень признателен!