onclick,未定义删除

时间:2014-01-21 14:44:50

标签: javascript php jquery ajax

我的代码有问题,但我无法找到它无法正常工作的原因。

我正在使用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!";
  }
}
?>

我希望有人可以帮我解决这个问题。

我想要的是当您单击链接/按钮时文件被删除而没有刷新。如果这是确认或没有确实无关紧要。

感谢至少提供帮助。

4 个答案:

答案 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";
  }
}
?>