【问题标题】:Populate select from server directory PHP jQuery AJAX从服务器目录填充选择 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 系统以使用选择 - 没有结果!也许有人可以尝试修改我链接的那个?

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

【问题讨论】:

    标签: php jquery html ajax directory


    【解决方案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】:
      1. 通过 JQuery 在 select 上使用附加在选择器中的容器更改第一个选择的 AJAX 请求,如下所示:$('ajax_process.php #select_a').post()
      2. 像这样设置您的接收 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>
        
      3. 您的 AJAX 调用现在可以返回您的动态选择框。

      【讨论】:

        猜你喜欢
        • 2014-05-24
        • 2017-05-21
        • 1970-01-01
        • 2010-12-11
        • 2013-05-07
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多