Php 通过JS(Jquery)发布不起作用,但使用表单
我有一个相当令人困惑的问题 我有一个php文件(http://example.com/delete.php) 当我这样做时,它会返回“Post Has Deleted!”但不会删除该Post 对此感到困惑,我制作了一个表单来测试phpPhp 通过JS(Jquery)发布不起作用,但使用表单,php,javascript,jquery,mysql,forms,Php,Javascript,Jquery,Mysql,Forms,我有一个相当令人困惑的问题 我有一个php文件(http://example.com/delete.php) 当我这样做时,它会返回“Post Has Deleted!”但不会删除该Post 对此感到困惑,我制作了一个表单来测试php <form action="http://example.com/delete.php" method="POST"> <input type="hidden" value="8" name="short"/> <input type
<form action="http://example.com/delete.php" method="POST">
<input type="hidden" value="8" name="short"/>
<input type="submit" name="submit" value="submit"/>
</form>
如果您的PHP脚本删除帖子,它不会返回任何内容
我的错,它没有回答真正的问题,但仍然是一个错误;) 实际上,PHP会话和AJAX有时似乎不能很好地协同工作 这意味着,
if($post->user\u id==$user\u id)
将永远不会验证,因此存在非删除问题
有两种方法可以看到这一点:
$user\u id
并查看它是否为null
$\u会话['user\u id']
,并进行检查。但出于安全原因,不能在生产中使用1- 您的PHP应该在每一个案例中都返回一些东西(至少在您查找实际案例中的bug时是这样) 3- 如果需要将数据从表单发送到脚本,然后执行重定向,我不建议使用AJAX,因为AJAX通常用于不离开页面!
因此,您应该按照注释中的内容进行操作,这是一个PHP脚本的表单,显然会删除某些内容,然后执行重定向。在您的代码中,我没有看到任何地方定义了
num
,并且无效的在您认为是无效的时候不会设置,因此,您没有将8
值传回,并且您收到了错误的消息,或者您需要以下信息:
$.post("http://example.com/delete.php", {short: $("input[name=short]").val()},
或者更简单,只需
,它也适用于任何未来的输入类型元素:
$.post("http://example.com/delete.php", $("form").serialize(),
我不确定调用代码的位置,例如,如果它是
.submit()
处理程序,它将如下所示:
$("form").submit(function() {
$.post("http://example.com/delete.php", $(this).serialize(), function(data){
if (data == 'false') {
alert('Deleting Failed!');
} else {
alert("Post Has Been Deleted!");
}
});
请注意,您需要在回调内部进行检查,因为invalid
将不会设置为true
,直到服务器以您当前拥有的方式返回数据,因为这是一个异步调用。已授予,并且显示了“Post已删除!”。然而,令人不安的是它没有被删除。当我尝试使用表单时,它才被删除。如果是这样,它不会返回“false”,从而不会假装它已被删除吗?@wills:这一定是来自js,正如Nick所说。但是,在你能做一些测试之前,我们不能说得更多。我在控制台中得到了这个消息:“加载资源失败:取消了delete.php。”为什么会发生这种情况?我在最初的帖子中更新了javascript。我包含了整个函数。那么普通的js代码和有效的表单js代码有什么区别呢?@Andy no,似乎是空的,或者从未返回过。我没有警告(数据);没有出现任何问题。我的错误是,num已定义,是一个有效的整数,并且是正确的。就在代码上面provided@wills-查看更新后的答案…您的函数(数据){}
稍后运行,而if
/警报在$之后会立即运行。post()
立即运行,因此在您检查时未正确设置无效的
。有趣。可能是真的,我一回到我的电脑就会解决这个问题。然而,这并不能解决这样一个事实,即它并没有删除id say。此外,用于注释的delete.php似乎在异步调用之外使用if,这很奇怪。顺便说一句,这一切都在一个锚的一次点击中。我假设数据为null,这意味着invalid仍然是false。无论如何,要处理错误。我尝试了警报(数据),什么也没发生。@wills-你能看看Firebug/chrome等,看看实际的反应是什么吗?另外,您的删除页面是否位于同一域、协议和端口上?
<?php
[...]
try {
if ($post->user_id == $user_id) {
[...]
echo 'true';
}
else {throw new Exception('false');}
}
catch (Exception $e) {
echo 'false';
}
?>
$('.post_delete').bind('click', function(event) {
var num = $(this).data('short'); // If that's where your data is... Fair enough.
if (confirm("Delete This Post? (http://lala.in/" + num + ")")) {
$.post("delete/post.php", {short: num}, // Relative is nice :D
function(data){
if (data == 'false') {
alert('Deleting Failed!');
}else{
alert("Post Has Been Deleted!");
// Your redirection here ?
}
});
}
});
$.post("http://example.com/delete.php", {short: $("input[name=short]").val()},
$.post("http://example.com/delete.php", $("form").serialize(),
$("form").submit(function() {
$.post("http://example.com/delete.php", $(this).serialize(), function(data){
if (data == 'false') {
alert('Deleting Failed!');
} else {
alert("Post Has Been Deleted!");
}
});