代码之家  ›  专栏  ›  技术社区  ›  John Beasley

使用PHP和jQuery显示目录中的文件

  •  0
  • John Beasley  · 技术社区  · 7 年前

    我合并了数据表来列出数据库中的所有记录。其中一些记录有链接到它们的文件。用户将单击一个链接,打开一个模式窗口,该窗口将显示该记录目录中的所有文件。

    <?php
    if(isset($_POST['editpartnercode']))
    {
        $partnerCode = $_POST['editpartnercode'];
    
        $dir = "D:/CargoDocsPDFs/" . $partnerCode;
    
        $ffs = scandir($dir);
    
        foreach($ffs as $ff)
        {               
            if($ff != '.' && $ff != '..')
            {   
                echo $ff;
                // echo json_encode($out); // <-this didn't work either
            }
        }       
    }
    ?>
    

    以下是使用$.post传递editpartnercode变量的jQuery:

    $.post('process/displayFiles.php', {editpartnercode:editpartnercode}, function(data)
    {
        console.log(data);
        var obj = JSON.parse(data);
        $('#allFiles').empty();
        var htmlToInsert = obj.map(function (item)
        {
            return '<li><b>' + item.ff + '</b></li>';
        }).join('');
        $('#allFiles').html(htmlToInsert);      
    });
    

    HTML如下所示:

    <div class="row">
        <div class="col-lg-12">
            <p>Uploaded Files</p>
            <ul id="allFiles">
            </ul>
        </div>
    </div>
    

    我可以在控制台中看到文件名,但我也遇到了以下错误:

    VM2087:1 Uncaught SyntaxError: Unexpected token T in JSON at position 0
    at JSON.parse (<anonymous>)
    at Object.success (genhome.js:210)
    at u (jquery.js:2)
    at Object.fireWith [as resolveWith] (jquery.js:2)
    at k (jquery.js:2)
    at XMLHttpRequest.<anonymous> (jquery.js:2)
    

    我遗漏了什么可以消除错误并在屏幕上打印文件?

    以下是在控制台中打印文件的方式:

    TEST1234567.TIFFTEST1234567_121218_100637.TIFFThumbs.db
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   cssBlaster21895    7 年前

    当尝试从纯php脚本返回json数组时,还可以设置响应的头

    header('Content-type: application/json');
    echo json_encode($ff);
    

    但我也会先填充数组,最后返回整个结果。

        2
  •  1
  •   Giacomo Scarpino    7 年前

    试试这个

    $partnerCode = $_POST['editpartnercode'];
    $dir = "D:/CargoDocsPDFs/" . $partnerCode;
    $ffs = array_diff(scandir($dir), array('..', '.'));
    echo json_encode($ffs);
    
        3
  •  0
  •   John Beasley    7 年前

    通过将JQuery更改为如下所示,我能够解决我的问题:

    $.post('process/displayFiles.php', {editpartnercode:editpartnercode}, function(data)
    {
        $('#allFiles').html(data);      
    });
    

    在PHP方面,我删除了json_编码,只是回显了列表项:

    foreach($ffs as $ff)
    {               
      if($ff != '.' && $ff != '..')
      { 
        echo "<li><a href='".$path."' download target='_blank'>".$ff."<a></li>";
      }
    }  
    

    使用上面的内容,我现在可以将模式窗口中的文件视为链接。我将有一个第二部分来回答这个问题。