में असिंक्रोनस अजाक्स कॉल मैं एससीओआरएम 2004 चौथा संस्करण के लिए जावास्क्रिप्ट एपीआई बना रहा हूं। उन लोगों के लिए जो एससीओआरएम के बारे में नहीं जानते हैं, मूल रूप से यह एक एपीआई मानक है कि ई-लर्निंग कोर्स एलएमएस (लर्निंग मैनेजमेंट सिस्टम) के साथ संवाद करने के लिए उपयोग कर सकते हैं।एससीओआरएम एपीआई
- प्रारंभ (args)
- getValue (key)
- setValue (कुंजी, मूल्य)
- बर्खास्त (args)
- कमिट (args): अब एपीआई निम्न विधि होना आवश्यक है
- GetDiagnostic (args)
- GetErrorString (args)
- GetLastError()
अब प्रारंभ करना किसी और चीज से पहले कहा जाना चाहिए, और अंतिम को अंतिम रूप देना चाहिए। GetValue/SetValue को बीच में कहीं भी कहा जा सकता है। मैं जो कर रहा हूं वह प्रारंभिक विधि में है, मुझे वेब सेवा से कुछ JSON मिल रहा है और एपीआई में संग्रहीत किया जा रहा है (बाद में GetValue/SetValue विधियों का उपयोग करते समय उपयोग किया जाना चाहिए)। जिस समस्या में मैं आ रहा हूं वह यह है कि jQuery के माध्यम से AJAX कॉल एसिंक्रोनस है, इसलिए जेएसओएन लोड होने से पहले प्रारंभिक विधि कॉल किया जा सकता है। जिस तरह से यह है, प्रारंभ करने के बाद GetValue को कॉल करने से अप्रत्याशित समस्याएं जेएसओएन हो सकती हैं जो GetValue उपयोग अभी तक नहीं है। मेरा सवाल यह है: यह सुनिश्चित करने के लिए मैं क्या कर सकता हूं कि जेएसओएन को 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
}
क्या किसी के पास कोई विचार है? मुझे वास्तव में इसकी प्रशंसा करनी होगी!