2014-01-21 68 views
1

我有一個問題,我的代碼,但我找不到爲什麼它不工作。onclick,刪除沒有定義

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

我希望有人能幫助我的問題。

我想要的是當你點擊鏈接/按鈕時文件被刪除而不刷新。如果這是一個確認或與外面並不重要。

感謝您的幫助,至少。

+2

刪除與一個GET請求是壞人壞事餿主意。 – epascarello

+1

我不明白。那麼「DELETE未定義」如何相關? –

+0

我和@OfirBaruch在同一條船上,我沒有看到任何名爲「delete」的變量 –

回答

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> 


UPDATE

爲了成功後的文件消失刪除您將需要做出一些改變。首先呼應的出按鈕的代碼:

<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"; 
    } 
} 
?> 
+0

aha,但我仍然有問題,沒有定義deleteFileAjax。我無法找到該部分的解決方案。 – yorin

+0

@ user3182383我已經更新了我的答案,以便爲您解決這個問題。 – Styphon

+0

我得到這個:資源解釋爲腳本,但與MIME類型文本/ HTML傳輸。但我不知道這是爲什麼,是否因爲試圖刪除圖像或其他東西。 – yorin

1

當你正在調試JavaScript錯誤,你應該總是看呈現源

onclick="deleteFileAjax(<?php echo $file ? >)" 

將呈現爲

onclick="deleteFileAjax(MYFILE)" 

那麼你有一個變量MYFILE?不,這應該是一個字符串,因此它需要引號

onclick="deleteFileAjax('<?php echo $file ?>')" 
         ^    ^
0

你需要彎曲'deleteFileAjax('<?php echo $file; ?>')按鈕

<button onclick="deleteFileAjax('<?php echo $file; ?>')">Delete</button> 

,而不是

<button onclick="deleteFileAjax(<?php echo $file ? >)">Delete</button> 
0

試試這個:

<button type="button" onClick="deleteFileAjax('<?php echo $file; ?>')">Delete</button>