AJAX和PHP根据需要使用RecursiveIteratorIterator来获取文件和文件夹列表

AJAX and PHP get files and folders list using RecursiveIteratorIterator as needed

本文关键字:RecursiveIteratorIterator 获取 文件夹 列表 文件 PHP AJAX      更新时间:2023-09-26


我需要从服务器获取文件和文件夹列表。
我不想一次得到所有的文件,文件夹,子文件夹。根据需要,我想一点一点地得到他们的。所以我使用AJAX。


我使用PHP。我使用递归迭代器

我在没有AJAX的情况下做到了,但是我不能使用AJAX:

只适用于第一个目录(~根目录)。我不能在函数中传递$name变量

* *不是JQuery ! !* *

PHP

<?php 
if (isset($_GET['you_choose_directory'])){print "do something";}
getList("/start_folder/"); //always(
function getList($name) {
    $path = realpath($name);
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CATCH_GET_CHILD);
    foreach($objects as $name => $object){
        if (filetype($name) == "dir") {
            print "<a href='?you_choose_directory=" . basename($name) . "'><b>" . basename($name) . "</b></a>";
        } else {
            print "<a><div></div><b>" . basename($name) . "</b></a>";
        }
    }
}
?>
JAVASCRIPT

function getXmlHttp(){
  var xmlhttp;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
function do_it() {
    var req = getXmlHttp();
    var list = document.getElementById('it_is_files');  
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            if(req.status == 200) {
                list.innerHTML = req.responseText;
            }
        }
    }
    req.open('GET', 'php.php', true);
    req.send(null);
    list.innerHTML = 'loading...';
}
do_it();

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8"/>
    <title>file list</title>
    <script src="javascript.js"></script>
</head>
<body onload="doOnLoad();">
    <div id="it_is_files">
    </div>
</body>
</html>

谢谢。

(我不懂PHP)

它只适用于根目录的原因是:

print "<a href='?you_choose_directory=" . basename($name) . "'><b>" . basename($name) . "</b></a>";

你正在制作一个链接到你所在的html页面,所以页面重新加载,一切都重新开始。你需要将标签的href设置为javascript:void,这样页面就不会重新加载。然后,您需要添加一个onClick事件处理程序来调用do_it()函数,并将要列出其内容的目录的路径传递给它。您需要更改do_it(),以便它可以接受参数。

HTML和javascript:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8"/>
    <title>file list</title>
    <script type="text/javascript">
    function getXmlHttp(){
      var xmlhttp;
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
          xmlhttp = false;
        }
      }
      if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
      }
      return xmlhttp;
    }
    function do_it(dirName) {
        var req = getXmlHttp();
        var list = document.getElementById('it_is_files');  
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                if(req.status == 200) {
                    list.innerHTML = req.responseText;
                }
            }
        }
        req.open('GET', 'getList.php?you_choose_directory=' + dirName, true);
        req.send(null);
        list.innerHTML = 'loading...';
    }
    </script>
</head>
<body onload="do_it('');">
    <div id="it_is_files">
    </div>
</body>
</html>
PHP:

<?php 
$dir = "./"; //default to root directory
if (strlen($_GET['you_choose_directory']) > 0){$dir = $_GET['you_choose_directory'];}
getList($dir);
function getList($name) {
    $path = realpath($name);
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CATCH_GET_CHILD);
    foreach($objects as $name => $object){
        if (filetype($name) == "dir") {
            print "<br/><a href='javascript:void' onClick='do_it('"" . $path . "/" . basename($name) . "'")'><b>" . basename($name) . "</b></a>";
        } else {
            print "<br/><a><b>" . basename($name) . "</b></a>";
        }
    }
}
?>
相关文章:
  • 没有找到相关文章