Tôi đang tạo API javascript cho SCORM 2004 4th Edition. Đối với những người không biết về SCORM, về cơ bản nó là một tiêu chuẩn API mà các khóa học eLearning có thể sử dụng để giao tiếp với LMS (Hệ thống quản lý học tập). Bây giờ API phải có các phương pháp sau đây:Gọi Ajax không đồng bộ trong API SCORM
- Initialize (args)
- GetValue (key)
- SetValue (key, value)
- Chấm dứt (args)
- Commit (args)
- GetDiagnostic (args)
- GetErrorString (args)
- GetLastError()
Bây giờ, khởi tạo phải được gọi trước bất kỳ điều gì khác và Chấm dứt phải là cuối cùng. GetValue/SetValue có thể được gọi bất cứ nơi nào ở giữa đó. Những gì tôi đang làm là trong phương thức Initialize Tôi nhận được một số JSON từ một dịch vụ web và lưu trữ nó trong API (được sử dụng khi sử dụng các phương thức GetValue/SetValue sau). Vấn đề tôi gặp phải là cuộc gọi AJAX qua jQuery là không đồng bộ, do đó, lệnh gọi phương thức Initialize có thể được thực hiện trước khi JSON được nạp. Với đó là cách nó được, một cuộc gọi đến GetValue sau khi gọi Initialize có thể gây ra các vấn đề bất ngờ b/c JSON mà GetValue sử dụng là không có được nêu ra. Câu hỏi của tôi là: Tôi có thể làm gì để đảm bảo rằng JSON được nạp trước khi các phương thức GetValue/SetValue được gọi? Tôi biết câu trả lời đơn giản là làm cho nó đồng bộ, nhưng điều đó không được thông báo chủ yếu, và nó dường như không muốn làm điều đó đối với tôi. Đây là mã của tôi về điều đó:
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
}
Có ai có ý tưởng nào không? Tôi thực sự sẽ đánh giá cao nó!