很抱歉问这个问题的人,但我已经尝试了一切,而且我在这个网站上的每一个场景都无法让这个工作。我已添加警报和回声等...但它似乎似乎没有调用该函数。有人可以帮忙吗?我从这里的另一篇文章中得到了这段代码,它被标记为正确的答案但对我不起作用。
<?php
$directory = "docs/hr/General Information";
$images = scandir($directory);
$ignore = Array(".", "..");
$count=1;
echo '<table border=1>';
foreach($images as $dispimage){
if(!in_array($dispimage, $ignore)){
echo "<tr id='del$count'><td>$count</td><td>$dispimage</td><td><input type='button' id='delete$count' value='Delete' onclick='deleteFile(\"$dispimage\",$count,\"$directory\");'></td></tr>";
$count++;
}
}
echo '</table>';
?>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function deleteFile(fname,rowid,directory)
{
$.ajax({ url: "deletefile.php",
data: {"filename":fname,"directory":directory},
type: 'post',
success: function(output) {
alert(output);
$("#del"+rowid).remove();
}
});
}
</script>
deletefile.php代码
<?php
$filename = $_POST['filename'];
$path = $_POST['directory'];
if(file_exists($path."/".$filename)) {
unlink($path."/".$filename); //delete file
echo('made it');
}
?>
在控制台中我得到:uncaught referenceError:未定义deletefile并突出显示此代码**;'></td></tr><tr id='del2'><td>2</td><td>Final Conference Room Map.pdf</td><td><input type='button' id='delete2' value='Delete' onclick='deletefile("Final Conference Room Map.pdf",2,"docs/hr/General Information");'></td></tr></table><script type="text/javascript" src="js/jquery.js"></script>**
答案 0 :(得分:0)
我的直觉告诉我PHP函数“file_exists”返回FALSE,因为如果file_exists == true你只是回应,那么帖子永远不会回复。
您可能需要检查的另一件事是您发送的目录和文件是URI编码的。因此,如果那里有任何非字母数字字符(例如空格),那么javascript POST'ing操作将在发送之前更可能是encodeURI,因此您之前收集的目录和文件将与那些你送回去了。所以你必须对字符串进行解码。
我可能会将您的PHP删除功能设置为:
$cleanPath = rawurldecode($path)."/".rawurldecode($filename);
if(file_exists($cleanPath)) {
unlink($cleanPath); //delete file
echo('made it');
} else {
echo("ERROR: file doesn't exist: " . $cleanPath);
}
这可能会指向你的方向。
答案 1 :(得分:0)
$dispimage
和$directory
是字符串,我认为引用是多余的。可能是你的问题。
onclick='deleteFile(\"$dispimage\",$count,\"$directory\")'
尝试:
onclick='deleteFile($dispimage,$count,$directory)'
答案 2 :(得分:0)
我刚试过你的代码,似乎工作正常。如果它不适合你,你可以试试这里。
确保deletefile.php文件确实存在。向ajax调用添加错误处理函数。只需将其添加到ajax函数参数:
错误:function(res){ 的console.log(RES); 警报(res.statusText); }
检查是否调用了删除功能。添加一个简单的
在函数体内部console.log('any text')
检查函数是否被调用。
如果它仍然不适合你,你可以修改你的代码看起来像下面这样,并尝试使用jquery向按钮添加一个click事件监听器。
<?php
//just modify the echo part of your php code to look like this.
echo "<tr id='del$count'><td>$count</td><td>$dispimage</td><td><input type='button' id='delete$count' value='Delete' data-image='{$dispimage}' data-id='{$count}' data-directory='{$directory}'/></td></tr>";
//Note:- you can optimize you php script using preg_grep() to scan the directory.
?>
<script type="text/javascript">
$(function(){
$('input[type=button]').click(function(){
//call the delete function here.
deleteFile($(this).attr('data-image'),$(this).attr('data-id'),$(this).attr('data-directory'));
});
});
</script>
答案 3 :(得分:0)
感谢大家的意见,他们都是好主意,但最终,问题最终成为了codeLobster的IDE问题。我从<script type="text/javascript" src="js/jquery.js"></script>
中删除了src =“”行,并让intellisense填写了src =“js / jquery.js”我终于得到它以查看脚本但我仍然得到删除文件未定义,我猜测是区分大小写的,因为我的函数是deleteFile,而我的onclick是deletefile,我发现我改变了但是......,一旦我将它们改为同样的情况我的删除工作。
答案 4 :(得分:-3)
试试这个:
$( document ).ready(function() {
function deleteFile(fname,rowid,directory)
{
$.ajax({ url: "deletefile.php",
data: {"filename":fname,"directory":directory},
type: 'post',
success: function(output) {
alert(output);
$("#del"+rowid).remove();
}
});
}
});