从服务器目录填充选择 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的主要内容,如果未能解决你的问题,请参考以下文章
从 PHP/MYSQL 选择值填充下拉菜单。如何重新排列输出