0

不得不再次求助于您!

我正在尝试使用在线目录中的文件名填充 html-javascript 中的数组。这甚至可能吗?

目录是http://timeactivitydiary.comyr.com/DATA/所以我想通过返回的文件名循环

FilesArray[0] = "SampleDataset1";
FilesArray[1] = "SampleDataset2";

任何帮助将非常感激

4

2 回答 2

1

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;
}
于 2013-01-21T15:55:29.027 回答
0

你可以在纯 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 比只是通过LIs 数组并将文件名推入它。

您可以使用 jQuery 或类似的库来做同样的事情,但即使纯 JS 解决方案更复杂,我认为在切换到某些库之前最好了解纯 JS 是如何工作的。

或者另一种选择是使用一些服务器端语言(如 PHP)在服务器上准备该数组。在这种情况下,您将能够关闭目录列表并控制应向当前用户显示哪些文件。

于 2013-01-21T16:13:13.750 回答