【问题标题】:$.ajax to call php function not working$.ajax 调用 php 函数不起作用
【发布时间】:2015-12-03 22:41:35
【问题描述】:

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

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

删除文件.php 代码

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

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

【问题讨论】:

  • 您是否添加了错误处理程序并查看错误是什么?有没有查看错误控制台,看看有没有错误?
  • 你在开发工具中检查网络和控制台怎么样?我相信你会找到一些线索,如果你找到任何线索,请发布它。并检查您的 PHP 错误日志。
  • 在您的 onclick 中,您的函数调用末尾有一个分号...您是否尝试删除它?
  • 另外,在您的 php 中,您可能想要添加一个“else”来返回 jquery 可以发出警报的内容。这样,如果找不到文件,它仍然可以工作。然后你至少会知道你是否走得那么远。我使用的另一个技巧是插入“die('here');”在 php 文件的最顶部,看看它是否有效,并继续在 php 文件中连续向下移动它,直到我找到导致问题的行......要抛出的错误。

标签: javascript php jquery ajax


【解决方案1】:

我的直觉告诉我,PHP 函数“file_exists”正在返回 FALSE,并且由于您只是在 file_exists == true 时回显,所以帖子永远不会回复。

您可能需要检查的另一件事是您发送的目录和文件是否经过 URI 编码。因此,如果其中有任何非字母数字字符(例如空格),那么 javascript POST 操作很可能会在发送之前对 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);
}

这可能会为您指明方向。

【讨论】:

    【解决方案2】:

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

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

    试试:

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

    【讨论】:

    • 不,引号是必需的,即使它们是字符串。
    【解决方案3】:

    我刚刚尝试了您的代码,它似乎工作正常。如果它不适合你,你可以试试。

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

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

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

    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>
    

    【讨论】:

    • 感谢 Sandeep,我在 jquery 上得到 404,不知道为什么找不到它。所以我改成上面的代码,我得到了这个错误 Uncaught ReferenceError: $ is not defined 并且什么也没有发生。
    • 好的,我可以看到 jquery 但现在我收到此错误 Uncaught SyntaxError: Unexpected identifier hrgeneraladmin.php:1 Uncaught ReferenceError: deleteFile is not definedonclick @ hrgeneraladmin.php:1
    • Uncaught ReferenceError: deleteFile is not defined 表示函数未定义。在调用它之前,您必须在代码中定义该函数。
    【解决方案4】:

    感谢大家的意见,他们都是好主意,但最终,问题最终成为 codeLobster 的 IDE 问题。我从&lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt; 中删除了 src="" 行,并让智能感知填充 src="js/jquery.js" 我终于看到了脚本,但我仍然得到 deletefile 未定义,好吧我猜区分大小写,因为我的函数是 deleteFile 而我的 onclick 是 deletefile,我发现我已经更改了它,但是...,一旦我将它们更改为相同的大小写,我的删除就起作用了。

    【讨论】:

      【解决方案5】:

      试试这个:

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

      【讨论】:

      • 这没有用,onclickDOM 完全加载所有 JavaScript 函数时被点击;因此,我不怀疑这是原因。
      • 现在该函数将是未定义的,因为它不再在全局范围内。
      • 感谢 thepiyush13 的快速响应,我很有希望,但没有运气。当我单击删除按钮时,没有任何反应。我正在使用 WAMP,但我将更新文件上传到运行 Apache 的 ubuntu 服务器,但仍然没有。就像它没有调用 deletefile 函数一样。
      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 2019-02-25
      • 2016-08-19
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多