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

时间:2015-12-03 22:41:35

标签: javascript php jquery ajax

很抱歉问这个问题的人,但我已经尝试了一切,而且我在这个网站上的每一个场景都无法让这个工作。我已添加警报和回声等...但它似乎似乎没有调用该函数。有人可以帮忙吗?我从这里的另一篇文章中得到了这段代码,它被标记为正确的答案但对我不起作用。

<?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');
}
?>

在控制台中我得到:uncaught referenceError:未定义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>**

5 个答案:

答案 0 :(得分:0)

我的直觉告诉我PHP函数“file_exists”返回FALSE,因为如果file_exists == true你只是回应,那么帖子永远不会回复。

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

我可能会将您的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);
}

这可能会指向你的方向。

答案 1 :(得分:0)

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

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

尝试:

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

答案 2 :(得分:0)

我刚试过你的代码,似乎工作正常。如果它不适合你,你可以试试这里。

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

    错误:function(res){     的console.log(RES);     警报(res.statusText);  }

  • 检查是否调用了删除功能。添加一个简单的

  

console.log('any text')

在函数体内部

检查函数是否被调用。

如果它仍然不适合你,你可以修改你的代码看起来像下面这样,并尝试使用jquery向按钮添加一个click事件监听器。

<?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>

答案 3 :(得分:0)

感谢大家的意见,他们都是好主意,但最终,问题最终成为了codeLobster的IDE问题。我从<script type="text/javascript" src="js/jquery.js"></script>中删除了src =“”行,并让intellisense填写了src =“js / jquery.js”我终于得到它以查看脚本但我仍然得到删除文件未定义,我猜测是区分大小写的,因为我的函数是deleteFile,而我的onclick是deletefile,我发现我改变了但是......,一旦我将它们改为同样的情况我的删除工作。

答案 4 :(得分:-3)

试试这个:

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