$.ajax调用php函数不起作用

$.ajax to call php function not working

本文关键字:函数 不起作用 php 调用 ajax      更新时间:2023-09-26

很抱歉问这个问题,伙计们,但我已经尝试了这个网站上的所有内容,以及每个场景,但无法实现。我添加了警报和回声等……但它似乎没有调用函数。有人能帮忙吗?我从这里的另一个帖子得到了这个代码,它被标记为正确答案,但对我不起作用

<?php
$directory  = "docs/hr/General Information"; 
$images = scandir($directory);
$ignore = Array(".", "..");
$count=1;
echo '<table border=1>';
foreach($images as $dispimage){
    if(!in_array($dispimage, $ignore)){
    echo "<tr id='del$count'><td>$count</td><td>$dispimage</td><td><input type='button' id='delete$count' value='Delete' onclick='deleteFile('"$dispimage'",$count,'"$directory'");'></td></tr>";
    $count++;
    }
}
echo '</table>';
?>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function deleteFile(fname,rowid,directory)
{
    $.ajax({ url: "deletefile.php",
        data: {"filename":fname,"directory":directory},
        type: 'post',
        success: function(output) {
          alert(output);
          $("#del"+rowid).remove();
        }
    });
}
</script>

deletefile.php代码

<?php
$filename = $_POST['filename'];
$path = $_POST['directory'];
if(file_exists($path."/".$filename)) { 
 unlink($path."/".$filename); //delete file
 echo('made it');
}
?>

在控制台中,我得到了:未获取的引用错误:未定义deletefile,它突出显示了以下代码**;'></td></tr><tr id='del2'><td>2</td><td>Final Conference Room Map.pdf</td><td><input type='button' id='delete2' value='Delete' onclick='deletefile("Final Conference Room Map.pdf",2,"docs/hr/General Information");'></td></tr></table><script type="text/javascript" src="js/jquery.js"></script>**

我的直觉告诉我,PHP函数"file_exists"返回FALSE,并且由于您仅在file_exits==true的情况下进行echo'ing,因此帖子永远不会回复。

您可能需要检查的另一件事是,您发送的目录和文件是否是URI编码的。因此,如果其中有任何非字母数字字符(例如空格),那么javascript POST'ing操作很可能会在发送之前对URI进行编码,因此您之前收集的目录和文件将与您发送回的目录不相同。所以你必须对字符串进行去编码。

我可能会将您的PHP删除功能设置为:

$cleanPath = rawurldecode($path)."/".rawurldecode($filename);
if(file_exists($cleanPath)) { 
    unlink($cleanPath); //delete file
    echo('made it');
} else {
    echo("ERROR: file doesn't exist: " .  $cleanPath);
}

这可能会给你指明一个方向。

$dispimage$directory是字符串,我认为引号是多余的。可能是你的问题。

onclick='deleteFile('"$dispimage'",$count,'"$directory'")'

尝试:

onclick='deleteFile($dispimage,$count,$directory)'

我刚试过你的代码,它似乎运行得很好。如果它对你不起作用,你可以试试。

  • 请尝试将jquery升级到最新版本
  • 请确保deletefile.php文件确实存在。向ajax调用添加一个错误处理程序函数。只需将其添加到ajax函数参数中即可:

    错误:函数(res){console.log(res);警报(res.statusText);}

  • 检查是否调用了delete函数。添加一个简单的

console.log("文本")

在函数体内部检查函数是否被调用。

如果它仍然不适用于您,您可以将代码修改为如下所示,并尝试使用jquery向按钮添加一个点击事件侦听器。

<?php
  //just modify the echo part of your php code to look like this.
  echo "<tr id='del$count'><td>$count</td><td>$dispimage</td><td><input type='button' id='delete$count' value='Delete' data-image='{$dispimage}' data-id='{$count}' data-directory='{$directory}'/></td></tr>";
 //Note:- you can optimize you php script using preg_grep() to scan the directory.
?>
<script type="text/javascript">
  $(function(){
    $('input[type=button]').click(function(){
       //call the delete function here.
       deleteFile($(this).attr('data-image'),$(this).attr('data-id'),$(this).attr('data-directory'));
    });
  });
</script>

感谢大家的意见,他们都是好主意,但最终,这个问题变成了codeLobster的IDE问题。我从<script type="text/javascript" src="js/jquery.js"></script>中删除了src="行,并让intellisense填充src="js/jquery.js"。我终于看到了脚本,但我仍然得到了deletefile。它是未定义的,我想这是区分大小写的,因为我的函数是deletefile,我的onclick是deletefile,我知道我已经更改了它,但。。。,一旦我把它们改成相同的情况,我的删除就成功了。

试试这个:

$( document ).ready(function() {
    function deleteFile(fname,rowid,directory)
        {
            $.ajax({ url: "deletefile.php",
                data: {"filename":fname,"directory":directory},
                type: 'post',
                success: function(output) {
                  alert(output);
                  $("#del"+rowid).remove();
                }
            });
        }
});