如何从JSON和AJAX中获取PHP数据?

时间:2016-01-08 12:30:16

标签: javascript php json ajax

嘿伙计我用PHP获取一些数据是列出文件夹和文件夹里面我有一些图像。但我愿意知道如何使用AJAX在JSON中获取数据以获取DropDown中的文件夹名称。

这是我正在使用的代码

JS

<html>
<head>
    <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 readDir(dirName) {
        var req = getXmlHttp();
        var list = document.getElementById('subDir');  
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                if(req.status == 200) {
                    list.innerHTML = req.responseText;
                }
            }
        }
        req.open('GET', 'getList.php?data=' + dirName, true);
        req.send(null);
        list.innerHTML = 'loading...';
    }

    </script>
</head>
<body onload="readDir('');">
    <div id="subDir">

    </div>
</body>
</html>

PHP

<?php 

$dir = "./data/";
if (strlen($_GET['data']) > 0){$dir = $_GET['data'];}
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='readDir(\"" . $path . "/" . basename($name) . "\")'><b>" . basename($name) . "</b></a>";
        } else {
            print "<br/><a><b>" . basename($name) . "</b></a>";
        }
    }
}

?>

在这里,您可以看到代码是如何工作的:http://tdhdemo.com/phpfetch/

1 个答案:

答案 0 :(得分:0)

我不确定我的问题是否正确但您可以将您的列表添加到PHP中的数组中并使用json_encode显示它。 从ajax调用接收数据时,使用JSON.parse使其易于阅读。

如果您希望将来再使用文件和文件夹,也可以将它们分开。

<?php 

$dir = "./data/";
if (strlen($_GET['data']) > 0){$dir = $_GET['data'];}
echo json_encode(getList($dir));

function getList($name) {
    $path = realpath($name);
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CATCH_GET_CHILD);

    $folderContent = array("directories" => array(), "files" => array());
    foreach($objects as $name => $object){
        if (filetype($name) == "dir") {
            array_push($folderContent["directories"], basename($name));
        } else {
            array_push($folderContent["files"], basename($name));
        }
    }

    return $folderContent;
}

?>

Javascript:

     function readDir(dirName) {
            var req = getXmlHttp();
            var list = document.getElementById('subDir');  
            req.onreadystatechange = function() {
                if (req.readyState == 4) {
                    if(req.status == 200) {
                        contentList = JSON.parse(req.responseText);

                        for(i in contentList["directories"]){
                           list.innerHTML = list.innerHTML + contentList["directories"][i];
                        }

                    }
                }
            }
            req.open('GET', 'getList.php?data=' + dirName, true);
            req.send(null);
            list.innerHTML = 'loading...';
        }