-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() しようとしているものを再確認し、リンクを解除しようとする直前にフルパスを吐き出し、それがローカルに存在し、適切な権限を持っていることを確認してください。

また、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スクリプト自体が見つかり、リクエストが正常に実行されるため、成功します。PHPスクリプトで問題が発生したことをJava スクリプトコードに知らせるために必要なことは、 Java スクリプトが読み取って対処できるように、ある種のエラー コードを返すことです。

PHPスクリプトに関しては、URLである$_POST['imagefile'] のリンク を解除しようとしています。これではうまくいきません。削除するファイルへの Web サーバー上のローカル パスを渡す必要があります。

次に、ファイルの削除が成功したか失敗したかを示すコードを Java スクリプト フロント エンドに返し、それをユーザーに通知します。

于 2013-03-28T15:04:15.497 に答える