उत्तर है
आप getScript()
सभी लिपियों के लोड होने तक वेट का उपयोग कर सकते हैं, जैसे कुछ:
$.when(
$.getScript( "/mypath/myscript1.js" ),
$.getScript( "/mypath/myscript2.js" ),
$.getScript( "/mypath/myscript3.js" ),
$.Deferred(function( deferred ){
$( deferred.resolve );
})
).done(function(){
//place your code here, the scripts are all loaded
});
बेला
उत्तर दें FIDDLE
उपरोक्त कोड में, एक डिफर्ड को जोड़ना और इसे अंदर हल करना $()
किसी jQuery कॉल के अंदर किसी अन्य फ़ंक्शन को रखने की तरह है, जैसे $(func)
, यह वैसा ही है
$(function() { func(); });
यानी यह इंतजार कर रहा है डोम के लिए तैयार होने के लिए है, तो ऊपर के उदाहरण में $.when
सभी स्क्रिप्ट लोड करने के लिए की प्रतीक्षा करता और डोम के लिए की वजह से तैयार होने के लिए$.Deferred
कॉल डोम में जो हल तैयार कॉलबैक।
अधिक सामान्य उपयोग के लिए, एक आसान कार्य
एक उपयोगिता फ़ंक्शन जो किसी भी स्क्रिप्ट को स्वीकार करता है उसे इस तरह बनाया जा सकता है:
$.getMultiScripts = function(arr, path) {
var _arr = $.map(arr, function(scr) {
return $.getScript( (path||"") + scr );
});
_arr.push($.Deferred(function( deferred ){
$( deferred.resolve );
}));
return $.when.apply($, _arr);
}
जिसका उपयोग इस तरह किया जा सकता है
var script_arr = [
'myscript1.js',
'myscript2.js',
'myscript3.js'
];
$.getMultiScripts(script_arr, '/mypath/').done(function() {
// all scripts loaded
});
जहां पथ सभी लिपियों के लिए पूर्व निर्धारित किया जाएगा, और वैकल्पिक भी है, जिसका अर्थ है कि यदि सरणी में पूर्ण URL है तो यह भी कर सकता है, और सभी को एक साथ छोड़ दें
$.getMultiScripts(script_arr).done(function() { ...
तर्क, त्रुटियाँ आदि।
एक तरफ के रूप में, ध्यान दें कि done
कॉलबैक में स्क्रिप्ट में पारित किए गए मिलान के कई तर्क होंगे, प्रत्येक तर्क एक सरणी का प्रतिनिधित्व करता है जिसमें प्रतिक्रिया होती है
$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...
जहां प्रत्येक सरणी में कुछ ऐसा होगा [content_of_file_loaded, status, xhr_object]
। हम आम तौर पर उन तर्कों का उपयोग करने की आवश्यकता नहीं है क्योंकि लिपियों को वैसे भी स्वचालित रूप से लोड किया जाएगा, और अधिकांश समयdone
कॉलबैक यह है कि हम वास्तव में जानते हैं कि सभी स्क्रिप्ट लोड हो चुकी हैं, मैं इसे पूर्णता के लिए जोड़ रहा हूं। , और दुर्लभ अवसरों के लिए जब लोड की गई फ़ाइल से वास्तविक पाठ को एक्सेस करने की आवश्यकता होती है, या जब किसी को प्रत्येक XHR ऑब्जेक्ट या कुछ समान तक पहुंचने की आवश्यकता होती है।
इसके अलावा, यदि कोई स्क्रिप्ट लोड करने में विफल रहती है, तो असफल हैंडलर को बुलाया जाएगा, और बाद की स्क्रिप्ट लोड नहीं की जाएंगी
$.getMultiScripts(script_arr).done(function() {
// all done
}).fail(function(error) {
// one or more scripts failed to load
}).always(function() {
// always called, both on success and error
});
$.Deferred(function( deferred ){$( deferred.resolve );})
यहाँ क्यों जोड़ा गया है?