我成功使用RecursiveIteratorIterator从root uploads文件夹中读取所有文件和文件夹。要创建一个界面,用户只需单击一个文件并显示文件的内容或点击,并显示相应的信息,我就会使用AJAX请求。有3个主页以下列递归方式显示信息:
showFiles.php:uploads /
showFileSubs.php:上传/ [点击内容] /
showSubs.php:上传/ [点击内容] / [子点击内容]
showFiles.php:uploads / [clicked content] / [sub clicked content] / [sub sub clicked content]
依此类推,直到没有更多内容或用户停止为止。
我遇到的问题是让showFiles.php显示上传内容/ [点击内容] / [子点击内容] / [子点击内容],因为我的$ _GET ['toBase']参数没有似乎永远不会被设定,尽管有信息进入它。我有信心(有点)信息进入它,因为每次点击,AJAX请求都会创建一个包含正确信息的警报消息框。
我手动将文件路径(所有相对路径)插入到我的RecursiveIteratorIterator中,并且信息是正确的,所以我知道这不是文件路径的问题。除了更改文件目标名称外,每个AJAX请求只是以前工作的复制和粘贴,所以它似乎不是一个粗心的错字。
我的所有页面都启用了error_reporting,但是,没有任何东西可见。
isDirectChild($ path)从我的RecurisveIteratorIterator获取内容并将其解析为相对路径。
的 showSubs.php 的
<table border = "0" cellspacing = "0" cellpadding = "0" id = "subParentTable" >
<tbody>
<form>
<?php
$allCurrFiles = isDirectChild($searchIn);
for($currFile = 0; $currFile < count($allCurrFiles); $currFile++) {
$img = getImgPath(trim(basename($allCurrFiles[$currFile])));
echo("<tr>");
echo("<td><button onClick = 'sendToBase(this)' type = 'button' name = 'butt' value = $allCurrFiles[$currFile] id = 'btn'><img src = $img /></button></td>");
# echo("<td onClick = 'sendToBase(this)' ><img src = $img /></td>");
echo("<td>$allCurrFiles[$currFile]</td>");
echo("</tr>");
}
?>
</form>
</tbody>
</table>
的 showFiles.php 的
$toBase = null; // to avoid the error of undefined index in my if statement
if(isset($_GET['toBase'])) {
$toBase = $_GET['toBase'];
echo("to base is $toBase <br />");
} else {
echo("to base is not set <br />");
}
if(($toBase == null) || (!isset($_GET['toBase']))) {
// shows the immediate content of uploads/
} else {
// meant to show the content of uploads/[clicked content]/[sub clicked content]/[sub sub clicked content]
}
?>
<div id = "displayTable"></div>
<div id = "displayDir"></div>
</body>
编辑:在意识到我忘记为我的AJAX请求写入创建一个div之后,它现在写道,但是,它正在重新加载整个页面,最终结果非常丑陋且无法使用。这包括重新加载每个页面中包含的菜单栏,但我不确定它为什么这样做。从好的方面来说,现在设置了$ toBase ......
编辑2:添加了我的AJAX请求。我只包含了相对的HTML,其余的是外部CSS文件。每个页面基本上都有相同的HTML。
每页中外部JS文件中的AJAX请求
function sendToBase(x) {
var row = x.parentNode.innerText;
var xmlhttp = "";
alert("to base -- " + row); // alert does show the clicked file name, so I know row contains th
if(window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if(window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET", "showFiles.php?toBase="+row, true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
document.getElementById("displayTable").innerHTML = xmlhttp.responseText;
}
}
}