मैं इस प्रश्न का उत्तर ढूंढ रहा था और मेरी अपनी समस्याएं थीं। मुझे विभिन्न स्थानों में कुछ समाधान मिले और उन्हें अपने पसंदीदा उत्तर में एक साथ रखा।
function exploreFolder(folderURL,options){
/* options: type explaination
**REQUIRED** callback: FUNCTION function to be called on each file. passed the complete filepath
then: FUNCTION function to be called after loading all files in folder. passed the number of files loaded
recursive: BOOLEAN specifies wether or not to travel deep into folders
ignore: REGEX file names matching this regular expression will not be operated on
accept: REGEX if this is present it overrides the `ignore` and only accepts files matching the regex
*/
$.ajax({
url: folderURL,
success: function(data){
var filesLoaded = 0,
fileName = '';
$(data).find("td > a").each(function(){
fileName = $(this).attr("href");
if(fileName === '/')
return; //to account for the (go up a level) link
if(/\/\//.test(folderURL + fileName))
return; //if the url has two consecutive slashes '//'
if(options.accept){
if(!options.accept.test(fileName))
//if accept is present and the href fails, dont callback
return;
}else if(options.ignore)
if(options.ignore.test(fileName))
//if ignore is present and the href passes, dont callback
return;
if(fileName.length > 1 && fileName.substr(fileName.length-1) === "/")
if(options.recursive)
//only recurse if we are told to
exploreFolder(folderURL + fileName, options);
else
return;
filesLoaded++;
options.callback(folderURL + fileName);
//pass the full URL into the callback function
});
if(options.then && filesLoaded > 0) options.then(filesLoaded);
}
});
}
तो फिर तुम इसे इस तरह कॉल कर सकते हैं:
var loadingConfig = {
callback: function(file) { console.log("Loaded file: " + file); },
then: function(numFiles) { console.log("Finished loading " + numFiles + " files"); },
recursive: true,
ignore: /^NOLOAD/,
};
exploreFolder('/someFolderURL/', loadingConfig);
यह उदाहरण है कि कॉलबैक जो कि NOLOAD
के साथ शुरू करने के लिए छोड़कर निर्दिष्ट फ़ोल्डर में हर फ़ाइल/फ़ोल्डर को कॉल करेंगे। यदि आप वास्तव में पृष्ठ में फ़ाइल को लोड करना चाहते हैं तो आप इस अन्य सहायक फ़ंक्शन का उपयोग कर सकते हैं जिसे मैंने विकसित किया था।
function getFileExtension(fname){
if(fname)
return fname.substr((~-fname.lastIndexOf(".") >>> 0) + 2);
console.warn("No file name provided");
}
var loadFile = (function(filename){
var img = new Image();
return function(){
var fileref,
filename = arguments[0],
filetype = getFileExtension(filename).toLowerCase();
switch (filetype) {
case '':
return;
case 'js':
fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
break;
case "css":
fileref=document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
break;
case "jpg":
case "jpeg":
case 'png':
case 'gif':
img.src = filename;
break;
default:
console.warn("This file type is not supported: "+filetype);
return;
}
if (typeof fileref !== undefined){
$("head").append(fileref);
console.log('Loaded file: ' + filename);
}
}
})();
यह फ़ंक्शन एक जेएस स्वीकार करता है। सीएसएस | (सामान्य छवि) फ़ाइल और इसे लोड करता है। यह जेएस फाइलों को भी निष्पादित करेगा। पूरा कॉल की जरूरत है कि सभी छवियों और * स्टाइलशीट और अन्य लिपियों लोड करने के लिए ऐसा दिखाई दे सकता अपनी स्क्रिप्ट में चलाने के लिए:
loadingConfig = {
callback: loadfile,
then: function(numFiles) { console.log("Finished loading " + numFiles + " files"); },
recursive: true,
ignore: /^NOLOAD/,
};
exploreFolder('/someFolderURL/', loadingConfig);
यह आश्चर्यजनक काम करता है!
मुझे लगता है कि ओपी सर्वर-साइड स्क्रिप्टिंग के बिना क्या करना चाहता है यह करने का यही एकमात्र तरीका है।लेकिन मैं सहमत हूं, यह बेहतर से बचा है। – harpo
मुझे विकल्प # 3 पसंद है और मैं मानता हूं कि यह एक अच्छा विकल्प नहीं है। हालांकि, मैं इसे पहले काम करने के लिए प्राप्त करना चाहता हूं :) तो मैं निर्देशिका में * सभी * फ़ाइलों को प्राप्त करने के लिए '.getScript()' का उपयोग कैसे करूं? क्या आप कुछ कोड प्रदान कर सकते हैं? – Hristo
हिस्टो, मेरा मतलब है कि आप निर्देशिका में प्रत्येक जावास्क्रिप्ट फ़ाइल के लिए एक getScrip() कॉल कर सकते हैं, फिर प्रत्येक बार एक नई प्रविष्टि को निर्देशिका में जोड़ा जाने पर एक नई प्रविष्टि जोड़ें। –