簡體   English   中英

jQuery Ajax和PHP取消鏈接

[英]Jquery Ajax & PHP unlink

我在使用jQuery運行刪除文件的AJAX請求時遇到了麻煩:

function deleteuploadedfile(filetodelete) {
             $imagefile = 'http://domain.co.uk/directory/uploads/'+filetodelete;
             alert($imagefile);
              $.ajax({
                type: 'POST',
                data: {
                    action: 'deleteimage',
                    imagefile: $imagefile,
                     },
            url: 'http://domain.co.uk/directory/delete.php',
            success: function(){
                alert('success');
              }
            })
        }


THE PHP FILE

<?php
    if($_POST["action"]=="deleteimage")
    {
        $imagefile = $_POST['imagefile'];
        $imagefileend = '/uploads/'.end(explode('images',$imagefile)); 
        unlink($_POST['imagefile']);
    }
?>

我收到警報“成功”,但文件未從服務器中刪除。

到目前為止,我只需要一些有關發生的事情以及為什么不刪除文件的指導。

在您的PHP代碼中,您正在執行以下操作:

unlink($_POST['imagefile']);

$ _POST ['imagefile']來自您的Ajax調用,並在javascript中設置為:

$imagefile = 'http://domain.co.uk/directory/uploads/'+filetodelete;
$.ajax({type: 'POST',
        data: {
              action: 'deleteimage',
              imagefile: $imagefile,
        }

您如何期望PHP能夠刪除遠程URL?

您似乎正在使用本地路徑設置$ imagefileend變量,但是您並未在unlink()調用中使用它。 仔細檢查您要取消鏈接的內容,在嘗試取消鏈接之前直接吐出完整路徑,並確認它在本地存在並且您具有適當的權限。

同樣,unlink()根據成功返回true或false。 捕獲並使用它來幫助調試。

建議的編輯(未試用):

 if($_POST["action"]=="deleteimage")
 {
     $imagefile = basename($_POST['imagefile']); // See http://php.net/basename
     $path = '/uploads/'. $imagefile;
     if(!file_exists($path)) {
          echo json_encode(array("success" => 0, "error" => "File $imagefile does not exist"));
          exit;
     }

     if(!unlink($path)) {
          echo json_encode(array("success" => 0, "error" => "File could not be deleted, check permissions"));
          exit;  
     }

     echo json_encode(array("success" => 1));   
 }

然后在ajax函數客戶端進行回調,檢查服務器響應,並確保成功= 1。

success: function(data){
    var response = $.parseJSON(data);
    if(!response.success) {
        alert(response.error);
    } else {
        alert("success!");
    }
}

另外,我建議您使用Chrome(或Firefox)並觀看“開發人員工具”的“網絡”標簽,以便您可以准確地看到服務器從ajax調用返回的內容。

由於PHP腳本本身已定位並且請求已完成,因此您將獲得成功 要讓Java腳本代碼知道PHP腳本出了點問題,您需要做的就是返回某種錯誤代碼,供Java腳本讀取並采取措施。

關於您的PHP腳本,您嘗試取消鏈接 $ _POST ['imagefile']這是一個URL。 這將不能很好地工作。 您應將網絡服務器上本地路徑傳遞到要刪除的文件。

然后將一些代碼返回到Java腳本前端,指示刪除該文件成功或失敗並通知用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM