$.ajax调用php函数不起作用
$.ajax to call php function not working
很抱歉问这个问题,伙计们,但我已经尝试了这个网站上的所有内容,以及每个场景,但无法实现。我添加了警报和回声等……但它似乎没有调用函数。有人能帮忙吗?我从这里的另一个帖子得到了这个代码,它被标记为正确答案,但对我不起作用
<?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();
}
});
}
});
- Ember Data DS.Model's set函数不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- Javascript onchange()函数不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- jQuery validate函数不起作用
- JS-窗口宽度函数不起作用
- javascript函数,该函数不起作用,但不会显示任何错误
- 为什么这个排序函数不起作用
- 为什么这个反向函数不起作用
- Javascript parseInt 函数不起作用
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 主干构造函数不起作用
- Javascript:this.value 函数不起作用
- Mocha 的 beforeEach() 和 done() 函数不起作用
- 在jQuery中,我的函数不起作用
- jquery-ui-rails的draggable和dropable函数不起作用
- 数学函数不起作用
- Javascript-创建打印到HTML的函数不起作用
- 我上传了客户's服务器一个js函数不起作用