3

我已经使用 jQuery 很长时间了,但是我从来没有学过 AJAX,所以我来了..

我们有这个代码:

$('body').load('hello.txt');

很简单,现在假设我有多个文本文件(我不知道它们的名字)我想加载,
我可以这样做吗?也许我需要循环所有文本文件并以某种方式加载它们?

提前致谢

4

3 回答 3

6

假设您在特定位置的服务器中有文本文件,您可以执行以下操作:

HTML 标记:

 <div id="fileList">
       here list of files will be loaded so that user can select which one to load
 <div>

 <div id="file-content">
       content of selected file will be loaded here
 <div>

jQuery部分:

 $.ajax({
      url : "FileServer/GetFileNames", // this is just a url that is responsible to return files list 
      success : function(data){
          //here a JSON data including filenames expected 
          $.each(data,function(i,item){
                var $fileHolder = $("<div></div>");
                $fileHolder.attr("filename",item.filename).click(function(){
                      $("#file-content").load($(this).attr("filename"));
                }).html(item.filename).appendTo("#fileList");  
          });
      }
 });

预期的 JSON 结构

   [
      {
          filename : "text1.txt"
      },
      {
          filename : "text2.txt"
      },
      {
          filename : "text3.txt"
      } 
   ]

在服务器端实现文件列表取决于您。

于 2012-12-21T12:35:19.803 回答
3

出于明显的安全原因,Javascript 无法访问本地文件系统。这是不可能的。

除非您尝试遍历服务器上的文件,在这种情况下,您无论如何都不想使用 jQuery,而是使用 ASP.NET 或 PHP 或您正在使用的任何框架之类的东西。

jQuery目录中的foreach文件

更新

试试这个

var files;
$.ajax({
    url: "http://homepage/folder",
    success: function (txt) {
        files = txt.split('<A href="');
    }
});
var fList = new Array();
$(files).each(function () {
    if (this.indexOf('.txt') > -1) {
        fList.push(this);
    }
});
for (i = 0; i < fList.length; i++) {
    fList[i] = fList[i].split('">')[0];
    fList[i] = fList[i].replace('"');
}

for (i = 0; i < fList.length; i++) {
    $('#idLoadHere').load(fList[i]);
}
于 2012-12-21T12:18:13.003 回答
0
  • 运行 FTP list 命令(有多种方法可以做到,Web-Sockets 就是其中之一。)
  • 一个更简单、更常见的安全解决方案是文件的服务器端列表,并“烹饪”HTML (意味着将文件列表嵌入其中)

*您可以使用原始 HTML 或将其放入varJavaScript 使用的语句中(例如)。

 

请参阅以下答案:

https://stackoverflow.com/a/30949072/257319

于 2015-06-20T00:43:33.447 回答