2011-05-31 42 views
2

堆栈用javascript加载所有xml文件而不知道名字

我试图在HTML中动态显示产品页面,这将很容易编辑。我的设置是一堆xml文件,每个产品一个,它们将进入与他们一起使用的html页面的相同目录。然后,当页面加载时,它也会读取目录中的所有xml文件,这些文件可能会经常更改。

我想在JavaScript中这样做,但我不知道如何开发我当前目录中的文件列表。我可以找到的唯一信息就是在客户端计算机上查找文件,而这些文件是我不需要的。我需要在当前目录中列出服务器上的所有文件。一旦知道名称,我已经有了用于加载文件的代码,我只需要一个文件名列表来放入函数。

一如既往非常感谢您的帮助。

RShom

+0

JavaScript不会访问您的服务器的文件系统;你的选择是为JavaScript提供一个处理程序来请求并解析它(* shudder *),或者你的服务器必须有一些处理能力来读取这些文件并动态地提供响应。 – Tejs 2011-05-31 22:03:29

+0

另外,您应该提高您接受的答案比率。 – Tejs 2011-05-31 22:03:57

+0

这听起来像你说我应该抛弃JavaScript,只是使用不同的语言? 此外,谢谢你不知道如何工作。现在我知道了。 – Rusty 2011-05-31 22:08:15

回答

1

OK,这样做会打开潘多拉的盒子,但也有很多很酷的功能,以及,不可胜数。即使没有PHP,它仍然是完全可行的......

方式一:

在Apache中打开XHTML文件列表。转到您的/etc/apache2/httpd.conf,确保你已经注释掉

LoadModule autoindex_module libexec/apache2/mod_autoindex.so 

以及关闭任何IndexOptions你可能有,并用这些代替他们......

IndexOptions XHTML SuppressHTMLPreamble Type=text/xml 

重新启动Apache,浏览到您配置的虚拟主机..,你应该有一个很好的风格的文件列表,以及类似于此源...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>Index of /dir/CRUD</title> 
</head> 
<body> 
<h1>Index of /dir/CRUD</h1> 
<ul><li><a href="/dir/"> Parent Directory</a></li> 
<li><a href="CRUD.aspx"> CRUD.aspx</a></li> 

<li><a href="CRUD.aspx.cs"> CRUD.aspx.cs</a></li> 
<li><a href="member.xml"> member.xml</a></li> 
<li><a href="web.config"> web.config</a></li> 
</ul> 
<address>Apache/2.2.17 (Unix) PHP/5.3.4 Server at yourserver,net Port 80</address> 
</body></html> 

正如你可以看到,这是一个相当简单的,有效的XML文件w ^你试图列出的仇恨者目录。现在,您可以随时使用XML格式的文件列表,根据您的需要,在样式,解析和处理方面尽可能创造性地进行创作......您可以轻松设置自动化图库,以显示每个文件在文件夹中,或者您可以使用info生成一个javascript数组,并执行其他RSS,JSON或Whathaveyou函数。

另一种方式,简化版,要求任何改变你的Apache IndexOptions,但他们DO启用需要...

在服务器上创建两个HTML文件...

TEST.HTM

<html> 
<head> 
<script> 
function reload_main() { 
    window.main.location.href = "main.htm"; 
} 
</script> 
</head> 
<frameset rows="*,1" onLoad="reload_main()"> 
<frame src="blank.htm" name="main"> 
<frame src="css/" name="directory"> 
</frameset> 
</html> 

main.htm中

<html> 
<body> 
<h1>Contents of directory</h1> 
<script> 
var links_length = parent.directory.window.document.links.length; 
var link = ""; 
for (var i = 0; i < links_length ; i++) { 
    link = parent.directory.window.document.links[i].href; 
    document.write(
    '<a href="'+link+'">'+link+'</a><br>' 
); 
} 
</script> 
<p><a href="index.htm" target="_parent">Return</a> 
</body> 
</html> 

这将让你同样的t基本上,但嵌入在一个看不见的iFrame中。不过,你可以提取后续的<li><a href="baboon.png"> baboon.png</a></li>项目,并操纵你的XML来做你想做的任何事情。

1

最简单的方法是有其发送的文件名作为一个JSON编码字符串在服务器上的脚本。

这个PHP脚本输出使用.xml扩展名是在同一个目录中的所有脚本XML文件(只是改变opendir使用一些其他的路径)

<?php 
$files = array(); 

if($handle = opendir(dirname(__FILE__))) { 
    while (false !== ($file = readdir($handle))) { 
     if(substr($file, -4) == ".xml") 
      $files[] = $file; 
    } 

    closedir($handle); 
} 

echo json_encode($files); 
?> 

你可以这样用JavaScript刚刚得到的JSON使用Ajax,这里使用jQuery:

$.getJSON("http://example.com/path/to/script.php" function(files) { 
    // Do something with the files 
}); 

其他唯一的办法是依靠生产指数在服务器上(如阿帕奇自动索引),但是这将是大量的工作。

+0

所以,我一直试图测试这个,事实证明,我使用的虚拟主机不支持PHP。 (http://faq.1and1.co.uk/scripting/webconfig/2008/3.html) 有没有其他解决方法呢? – Rusty 2011-06-01 20:51:05

+0

以前编码为ASPX的人可能很容易将此脚本转换为在您的Web服务器上工作,不幸的是我之前没有编写过ASPX,所以我不知道。 – 2011-06-01 21:24:17

相关问题