如何在尝试使用控制器方法删除文件夹时调试 AJAX 响应中的错误?



当用户单击前端的删除按钮时,我正在尝试删除文件夹。这是递归清空文件然后删除目录的函数:

.php

function deleteFiles($target){
if(is_dir($target)){
$files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned
foreach( $files as $file ){
deleteFiles( $file );      
}
rmdir( $target );
}elseif(is_file($target)) {
unlink( $target );  
}
}   

上面的函数完成了它的工作,但会抛出一些警告,如"权限被拒绝"和"找不到这样的目录",但仍然删除了该目录。问题出在 AJAX 调用中,代码如下:

JavaScript

$.ajax({ 
url: '/course-elearn/coursepaysapp/sections/delete_section_activity',
data: {section_name: section_name},
type: 'GET',
success: function(result){
alert(result);
},
error: function(result){
alert(result);
}
});

上面的调用正在工作,但在 AJAX 中执行错误函数并使用"对象对象"响应,甚至没有删除目录,我很困惑并且无法调试,因为请求是通过 AJAX 发出的,我无法检索错误。

请考虑以下几点。

示例:https://www.w3schools.com/php/php_exception.asp

.PHP

function deleteFile($f){
$r = array("result" => "error", "message" => "");
try {
unlink($f);
$r['result'] = success;
$r['message'] = "$f deleted.";
}
catch(Exception $e) {
$r['message'] = $e->getMessage();
}
return $r;
}
function deleteFiles($target){
$result = array(
"result" => "",
"message" => ""
);
try {
if(is_dir($target)) {
$files = glob( $target . '*', GLOB_MARK ); 
foreach( $files as $file ){
deleteFile($file);      
}
rmdir($target);
$result['result'] = "success";
$result['message'] = "$target was removed."
} elseif(is_file($target)) {
$result = deleteFile($target);
}
}
catch(Exception $e) {
$result['result'] = "error";
$result['message'] = $e->getMessage();
}
return $result;
}

然后你可以像这样使用它:

$results = deleteFiles($_GET['section_name']);
header('Content-Type: application/json');
echo json_encode($results);

在你的 JavaScript 中,你不会发送请求并获得可以解释的响应。

JavaScript

$.getJSON("/course-elearn/coursepaysapp/sections/delete_section_activity", { section_name: section_name }, function(r){
if(r.result == "success"){
console.log(r.message);
} else {
alert("Error: " + r.message);
}
});

最新更新