不得不再次求助于您!
我正在尝试使用在线目录中的文件名填充 html-javascript 中的数组。这甚至可能吗?
目录是http://timeactivitydiary.comyr.com/DATA/所以我想通过返回的文件名循环
FilesArray[0] = "SampleDataset1";
FilesArray[1] = "SampleDataset2";
任何帮助将非常感激
不得不再次求助于您!
我正在尝试使用在线目录中的文件名填充 html-javascript 中的数组。这甚至可能吗?
目录是http://timeactivitydiary.comyr.com/DATA/所以我想通过返回的文件名循环
FilesArray[0] = "SampleDataset1";
FilesArray[1] = "SampleDataset2";
任何帮助将非常感激
jquery GET 如何获取 HTML。
然后使用 jquery find 抓取在该 HTML 中找到的所有链接元素(因为 apache 中的未受保护目录是一个带有 A-tags 作为目录文件的列表)。
最后删除第一项,因为那是父目录链接
$.get('http://timeactivitydiary.comyr.com/DATA/ ', function(data) {
var $linkElements = $('a');
var FilesArray = $(data).find($linkElements);
FilesArray.shift();
});
我希望这会有所帮助。
您应该注意这一点,因为它确实会向所有用户泄露安全信息(即此目录不受保护),如果正确的用户发现这可能会导致他们询问有关 HOST 服务器的更多问题。
请务必花时间确保此服务器的安全性。Apache 给出了一个关于最佳实践的简短文档: http ://httpd.apache.org/docs/2.2/misc/security_tips.html
或者,您可以创建 GET 请求调用的代理脚本,并且代理脚本可以返回文件夹内容,将其从客户端移动到服务器端检查。这样,没有人会知道文件来自何处或该目录未受保护。就像是:
$.getJSON('/proxy-script.php', function(data) {
//jquery code
});
和 proxy-script.php 脚本:
<?php
//call file contents
$json = json_encode($files_in_folder);
echo $json;
}
你可以在纯 JS 中做这样的事情:
var xhr = new XMLHttpRequest();
xhr.open('GET', "http://timeactivitydiary.comyr.com/DATA/", false);
xhr.send();
var div = document.createElement("div");
div.innerHTML = xhr.responseText;
var lis = div.getElementsByTagName("ul")[0].getElementsByTagName("li")
var filenames = [];
for(var i = 0;i < lis.length;i++) {
filenames.push(lis[i].innerText ? lis[i].innerText : lis[i].innerContet);
}
//here you should have a list of all file names
基本上,这里使用 AJAX。请注意,示例被简化了很多,并且不是跨浏览器的。只需在网上搜索如何进行跨浏览器 ajax 请求。此外,我的代码使用同步 ajax 请求。只是为了简单。因此,执行请求时您的界面将冻结。
比我使用创建的 div 解析收到的 html(xhr.responseText
包含在浏览器中打开页面时看到的 HTML)。比我ul
在那个 div 和li
' 里面首先找到的ul
比只是通过LI
s 数组并将文件名推入它。
您可以使用 jQuery 或类似的库来做同样的事情,但即使纯 JS 解决方案更复杂,我认为在切换到某些库之前最好了解纯 JS 是如何工作的。
或者另一种选择是使用一些服务器端语言(如 PHP)在服务器上准备该数组。在这种情况下,您将能够关闭目录列表并控制应向当前用户显示哪些文件。