我的代码有问题,但我无法找到它无法正常工作的原因。
我正在使用AJAX创建文件删除链接。
我知道我的删除页面正在运行,但我的javascript没有去删除该文件。
这是我的代码的一部分。
formatoverzicht.php
<script type="text/javascript" src="/website/libraries/jquery.js">
function deleteFileAjax(filename) {
scriptitem = document.createElement('script');
scriptitem.type = 'text/javascript';
scriptitem.src = 'ajax.php?filename=' + filename;
scriptitem.id = 'ajax';
document.body.appendChild(scriptitem);
setTimeout('document.body.removeChild(document.getElementById("ajax"))', 500);
}
</script>
<?php
$results = $db->query("SELECT * FROM format");
echo "<table border= 1><tr><td>Bestands naam</td><td>Groote</td><td>Laatst aangepast</td> <td>Download</td><td>Verwijderen</td></tr>";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$filelocation = "uploads/". $file;
$filesize2 = filesize($filelocation);
if($filesize2 < '999'){
$size = "Byte";
}else if($filesize2 > '1000' && $filesize2 < '999999'){
$size = "KB";
$filesize = $filesize2 / 1000;
}else if($filesize2 > '1000000' && $filesize2 < '999999999'){
$size = "MB";
$filesize = $filesize2 / 1000000;
}else if($filesize2 > '1000000000' && $filesize2 < '999999999999'){
$size = "GB";
$filesize = $filesize2 / 1000000000;
}
$filesizeround = number_format((float)$filesize, 2, ',','');
if($file != '.' && $file != '..' && $file != "desktop.ini"){
$lastedit = date("j-n-o H:i", filemtime($filelocation));
$fileplace = "uploads/" .$file;
echo "<tr><td>".$file."</td><td>".$filesizeround. " " .$size."</td> <td>". $lastedit ."</td><td><a href='$fileplace' download='$file' '>Download</a></td><td>";
?> <button onclick="deleteFileAjax(<?php echo $file ? >)">Delete</button></td></tr><?php
}
}
closedir($dh);
}
}
?>
和ajax.php
<?php
if (isset($_GET['filename'])) {
if (unlink(htmlentities("uploads/". $_GET['filename']))) {
echo "Great success!";
}
}
?>
我希望有人可以帮我解决这个问题。
我想要的是当您单击链接/按钮时文件被删除而没有刷新。如果这是确认或没有确实无关紧要。
感谢至少提供帮助。
答案 0 :(得分:1)
在调试JavaScript错误时,应始终查看渲染的源
onclick="deleteFileAjax(<?php echo $file ? >)"
将呈现为
onclick="deleteFileAjax(MYFILE)"
你有变量MYFILE吗?不,它应该是一个字符串,所以它需要引号
onclick="deleteFileAjax('<?php echo $file ?>')"
^ ^
答案 1 :(得分:0)
您需要在按钮
中变形'
deleteFileAjax('<?php echo $file; ?>')
<button onclick="deleteFileAjax('<?php echo $file; ?>')">Delete</button>
而不是
<button onclick="deleteFileAjax(<?php echo $file ? >)">Delete</button>
答案 2 :(得分:0)
试试这个:
<button type="button" onClick="deleteFileAjax('<?php echo $file; ?>')">Delete</button>
答案 3 :(得分:0)
您没有使用Ajax。你正在做的是将另一个文件加载到文件正文中,然后删除它,这是一个坏主意。你应该看看jQuery's Ajax。您想要做的一个例子是:
function deleteFileAjax(filename) {
$.ajax(function() {
type: 'POST',
url: 'ajax.php',
data: { filename: $(this).data("file") },
success: function() {
alert("File deleted");
}
});
}
您的按钮也出错:
<button onclick="deleteFileAjax(<?php echo $file ? >)">
应该是
<button onclick="deleteFileAjax('<?php echo $file ?>');">#
此外,您不应在包含文件的同一<script>
标记中包含代码。
<script type="text/javascript" src="/website/libraries/jquery.js">
function deleteFileAjax(filename) {
scriptitem = document.createElement('script');
scriptitem.type = 'text/javascript';
scriptitem.src = 'ajax.php?filename=' + filename;
scriptitem.id = 'ajax';
document.body.appendChild(scriptitem);
setTimeout('document.body.removeChild(document.getElementById("ajax"))', 500);
}
</script>
需要
<script type="text/javascript" src="/website/libraries/jquery.js"></script>
<script type="text/javascript">
function deleteFileAjax(filename, buttonId) {
scriptitem = document.createElement('script');
scriptitem.type = 'text/javascript';
scriptitem.src = 'ajax.php?filename=' + filename;
scriptitem.id = 'ajax';
document.body.appendChild(scriptitem);
setTimeout('document.body.removeChild(document.getElementById("ajax"))', 500);
}
</script>
<小时/> 的更新强>
要在删除成功后使文件消失,您需要进行一些更改。首先回显按钮的代码:
<button data-file="<?php echo $file ?>" class="delete-btn">Delete</button>
其次是JavaScript:
$('.delete-btn').click(function() {
$.ajax(function() {
type: 'POST',
url: 'ajax.php',
data: { filename: filename },
success: function(return) {
if(return == 'SUCCESS') {
$this = $(this).closest('tr');
$this.remove();
}
}
});
});
最后执行删除的页面:
<?php
if (isset($_POST['filename'])) {
if (unlink(htmlentities("uploads/". $_POST['filename']))) {
echo "SUCCESS";
}
}
?>