উত্তরটা হচ্ছে
আপনি এর সাথে প্রতিশ্রুতি ব্যবহার করতে পারেন 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
});
বেহালা
অন্য বেহালার
উপরের কোডে, একটি মুলতুবি যুক্ত করা এবং এটির অভ্যন্তরে সমাধান করা $()
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
});
যেখানে পাথটি সমস্ত স্ক্রিপ্টগুলিতে প্রম্পট করা হবে এবং এটি optionচ্ছিকও রয়েছে, এর অর্থ যদি অ্যারেটি সম্পূর্ণ URL এর অন্তর্ভুক্ত থাকে তবে এটিও এটি করতে পারে এবং সমস্ত পথ একসাথে ছেড়ে চলে যেতে পারে that
$.getMultiScripts(script_arr).done(function() { ...
যুক্তি, ত্রুটি ইত্যাদি
একপাশে, নোট করুন যে done
কলব্যাকটিতে স্ক্রিপ্টগুলিতে পাস করা মিলগুলির সাথে অনেকগুলি আর্গুমেন্ট থাকবে, প্রতিটি যুক্তি প্রতিক্রিয়াযুক্ত অ্যারের প্রতিনিধিত্ব করবে
$.getMultiScripts(script_arr).done(function(response1, response2, response3) { ...
যেখানে প্রতিটি অ্যারের মতো কিছু থাকবে [content_of_file_loaded, status, xhr_object]
। আমাদের সাধারণত সেই আর্গুমেন্টগুলি অ্যাক্সেস করার দরকার নেই কারণ স্ক্রিপ্টগুলি যে কোনওভাবে স্বয়ংক্রিয়ভাবে লোড হবে এবং বেশিরভাগ সময় done
কলব্যাক হ'ল আমরা বুঝতে পারি যে সমস্ত স্ক্রিপ্টগুলি লোড হয়েছে, আমি কেবল এটি সম্পূর্ণতার জন্য যুক্ত করছি , এবং বিরল ইভেন্টগুলির জন্য যখন লোড হওয়া ফাইল থেকে আসল পাঠ্য অ্যাক্সেস করা দরকার হয় বা যখন প্রতিটি এক্সএইচআর অবজেক্টে বা এর অনুরূপ কিছুতে অ্যাক্সেসের প্রয়োজন হয়।
এছাড়াও, কোনও স্ক্রিপ্ট লোড করতে ব্যর্থ হলে, ব্যর্থ হ্যান্ডলার কল করা হবে এবং পরবর্তী স্ক্রিপ্টগুলি লোড হবে না
$.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 );})
এখানে যুক্ত কেন আমাকে ব্যাখ্যা করতে আপত্তি করবেন ?