从服务器目录填充选择 PHP jQuery AJAX

Posted

技术标签:

【中文标题】从服务器目录填充选择 PHP jQuery AJAX【英文标题】:Populate select from server directory PHP jQuery AJAX 【发布时间】:2012-05-19 19:05:02 【问题描述】:

我的服务器上有一个文件结构,如下所示:

我的问题比较复杂:如何从服务器子文件的内容中逐步填充<select> html标签。

例如,下面我有 3 个 <select> 标记,它们反映了上面显示的文件结构。当第一个选择被更改时,jQuery 应该使用 AJAX 和 php 在服务器上找到该目录,并将所有子文件列出到第二个<select>。单击第二个时,应列出该文件夹的所有子文件,依此类推。最终我想要 5 个<select> 标签。

我认为这最好使用 jQuery 来完成,它会检测到选择中的变化:

$("select").change(function() 
        var selected = $(this).children("option:selected").text();
);

将该变量发送到 AJAX,它要求 PHP 文件返回该文件夹的子文件数组,并用该数组中的数据填充下一个选择。我不太自信的地方是 PHP。

我尝试过的:查看了TreeView 系统 - 不适合。试图修改 TreeView 系统以使用选择 - 没有结果!也许有人可以尝试修改我链接的那个?

在此先感谢,我们将一如既往地为您提供任何帮助!

【问题讨论】:

【参考方案1】:

使用文件夹目录填充选择选项值:

<div class="selects">
    <select name="folder1">
        <option value="folder1">folder1</option>
        <option value="folder2">folder2</option>
        <option value="folder3">folder3</option>
    </select>
</div>

jQuery:

// Use live. Because the other selects will be filled with jquery.
$("select").live("change", function() 
    var folder = $(this).val();
    var select_id = $(this).attr("name").replace('folder', '');

    $.ajax(
        url: 'ajax.php',
        type: "POST",
        data: "folder": folder,
        success: function(data) 
            var select = $("<select>");

            select_id++;

            select.attr("name", "folder"+select_id).append(data);
            $(".selects").append(select);
        
    );
);

PHP:

<?php
    $shared = "some/path/to/shared/folders/";
    $folder = $_POST['folder'];

    $scan = scandir($shared.$folder);

    $bad = array(".", "..", ".DS_Store", "_notes", "Thumbs.db");

    $scan = array_diff($scan, $bad);

    foreach ($scan as $val)
    
        if (is_dir($shared.$folder.'/'.$val))
            echo '<option value="'.$folder.'/'.$val.'">'.$val.'</option>';
    
?>

我没有测试它可能有一些拼写错误,但这应该可以解决问题

【讨论】:

您好,感谢您的精彩回答!我似乎无法正常工作,请参阅此链接 jackdent.co.uk/selecttest 如果您知道我的意思,它还会显示导航“点” - 有没有办法删除这些。 如果您转到上面的链接,我仍然无法使用它:/ 抱歉!我在ajax文件中有如下目录: $shared = "/selecttest/directory/"; 我认为 forlder 名称上的逗号 (,) 会导致问题。我像这样删除并尝试了它,它起作用了。 这似乎无法解决 - 请参阅此更新链接 jackdent.co.uk/selecttest.zip。请你能链接一个你如何工作的测试用例吗?谢谢,打扰了【参考方案2】:

使用此处讨论的方法获取目录路径 --> Using scandir() to find folders in a directory (PHP)

收集子目录/文件的字符串(路径)并构造下一级

【讨论】:

【参考方案3】:
    通过 JQuery 在 select 上使用附加在选择器中的容器更改第一个选择的 AJAX 请求,如下所示:$('ajax_process.php #select_a').post()

    像这样设置您的接收 AJAX 页面:

    //<?php
    //work, etc
    
    
    //you said "return array of the sub-files", so I reckon:
    
    $select = "<select id='data'>";
    foreach ($array as $select_item) 
       $select .= "<option value='$select_item'" . $select_item . "</option>";
    
    $select .= "</select>";
    
    
    //now $select contains your HTML code for your select box.
    ?>
    
    //break out of php, then:
    <span id="select_a">
    <?php print $select; ?>
    </span>
    

    您的 AJAX 调用现在可以返回您的动态选择框。

【讨论】:

以上是关于从服务器目录填充选择 PHP jQuery AJAX的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 从数据库中填充选择框

从 PHP/MYSQL 选择值填充下拉菜单。如何重新排列输出

使用 JQUERY、AJAX 和 PHP 填充选择框

PHP jQuery mySQL 填充 DROPDOWN 字段错误

通过php填充多个选择框jquery mobile

jQuery 使用 jQuery ajax json、php 将项目填充到 Select 中