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

时间:2022-10-08 18:41:15

Hey guys I am fetching some data with PHP with is listing the folders and Inside the folders I have some images. But I am willing to know how can I get that data in JSON with AJAX to get the name of folders in a DropDown.

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

This is the code that I am using

这是我正在使用的代码

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>";
        }
    }
}

?>

Here you can see the code how is working: http://tdhdemo.com/phpfetch/

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

1 个解决方案

#1


0  

I'm not sure I get your question right but you can add your list to an array in PHP and display it using json_encode. When receiving data from the ajax call, use JSON.parse to make it easily readable.

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

You can also separate files and folders if you want to use them in the future.

如果要在将来使用它们,也可以分隔文件和文件夹。

<?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...';
        }

#1


0  

I'm not sure I get your question right but you can add your list to an array in PHP and display it using json_encode. When receiving data from the ajax call, use JSON.parse to make it easily readable.

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

You can also separate files and folders if you want to use them in the future.

如果要在将来使用它们,也可以分隔文件和文件夹。

<?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...';
        }