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

Javascript $.ajax调用php函数不起作用,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,很抱歉问这个问题,伙计们,但我已经尝试了这个网站上的一切,而且每个场景,但无法让这个工作。我已经添加了警报和回声等。。。但它似乎并没有调用这个函数。有人能帮忙吗?我从这里的另一个帖子得到了这个代码,它被标记为正确答案,但对我来说不起作用 <?php $directory = "docs/hr/General Information"; $images = scandir($directory); $ignore = Array(".", ".."); $count=1; echo '&

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

<?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');
}
?>
在控制台中,我得到:uncaughtreferenceerror:deletefile未定义,它突出显示此代码**;'>2最终会议室地图.pdf**

试试这个:

$( 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();
                }
            });
        }
});

我的直觉告诉我PHP函数file_exists返回FALSE,因为只有file_exists==true时才回显,所以post永远不会回复

您可能需要检查的另一件事是,您发送的目录和文件是URI编码的。因此,如果其中有任何非字母数字字符,例如空格,则javascript发布操作很可能会在发送之前对URI进行编码,因此您先前收集的目录和文件将与您发送回的目录和文件不同。因此,您必须对字符串进行反编码

我可能会将您的PHP delete函数设置为:

$cleanPath = rawurldecode($path)."/".rawurldecode($filename);
if(file_exists($cleanPath)) { 
    unlink($cleanPath); //delete file
    echo('made it');
} else {
    echo("ERROR: file doesn't exist: " .  $cleanPath);
}
这可能会为您指明方向。

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

onclick='deleteFile(\"$dispimage\",$count,\"$directory\")'
尝试:


我刚刚尝试了你的代码,它似乎工作得很好。如果这对你不起作用,你可以试试

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

错误:函数{ console.logres; alertres.statusText; }

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

控制台。记录“任何文本”

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

如果它仍然不适用于您,您可以修改代码,使其看起来像下面这样,并尝试使用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问题。我从中删除了src=行,让intellisense填充src=js/jquery.js。我终于让它看到了脚本,但我仍然得到了未定义的deletefile,我想这是区分大小写的,因为我的函数是deletefile,onclick是deletefile,我想我已经更改了,但是。。。,一旦我将它们更改为相同的情况,我的删除就起作用了。

您是否添加了错误处理程序并查看错误是什么?您是否查看了错误控制台并查看是否存在任何错误?在开发工具中检查网络和控制台如何?我相信你会找到一些线索,如果你找到了,就把它贴出来。检查PHP错误日志。在onclick中,函数调用的末尾有一个分号。。。您尝试过删除它吗?另外,在php中,您可能希望添加一个else,它返回jquery可以提醒的内容。这样,如果找不到文件,它仍然可以工作。然后你至少会知道你是否能走那么远。我使用的另一个技巧是插入die'here';在一个php文件的最顶端,看看这是否有效,并在php文件中连续向下移动它,直到我找到导致问题的那行。。。。如果您似乎无法抛出任何错误,这只是一种逐步解决问题的方法;因此,我不怀疑这是原因。现在函数将是未定义的,因为它不再在全局范围内。感谢Piyush13的快速响应,我很有希望,但没有运气。当我点击删除按钮时,什么也没发生。我正在使用WAMP,但我将更新文件上传到运行Apache的ubuntu服务器上,但仍然一无所获。这就像它没有调用deletefile函数一样。不,引号是必需的,即使它们是字符串。谢谢Sandeep,我在jquery上得到了一个404,不知道为什么它找不到它。因此,我更改了上面的代码,得到了这个错误uncaughtreferenceerror:$没有定义,什么也没有发生。好的,我得到了它来查看jquery,但是现在我得到了这个错误uncaughtsyntaxerror:uncaughtidentifier hrgeneraladmin.php:1 uncaughtreferenceerror:deleteFile没有定义inclick@hrgeneraladmin.php:1uncaughtreferenceerror:deleteFile未定义表示未定义函数。在调用函数之前,必须在代码中定义该函数。
<?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>