-1

我在使用 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']);
    }
?>

我收到警报“成功”但文件没有从服务器中删除。

我已经做到了这一点,只需要一些关于正在发生的事情以及为什么文件没有被删除的指导。

4

2 回答 2

2

在您的 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 调用返回的内容。

于 2013-03-28T15:03:34.557 回答
0

由于PHP脚本本身已定位并且请求执行正常,您将获得成功。为了让您的java 脚本代码知道您的PHP脚本中出了问题,您必须做的是返回某种错误代码,供您的java 脚本阅读并采取行动。

关于您的PHP脚本,您尝试取消链接 $_POST['imagefile']这是一个 URL。这不会很好地工作。您应该将网络服务器上的本地路径传递给您要删除的文件。

然后将一些代码返回到您的 java 脚本前端,指示删除文件成功或失败并通知用户。

于 2013-03-28T15:04:15.497 回答