Php 通过JS(Jquery)发布不起作用,但使用表单

Php 通过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

我有一个相当令人困惑的问题

我有一个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="submit" name="submit" value="submit"/>
</form>

如果您的PHP脚本删除帖子,它不会返回任何内容


我的错,它没有回答真正的问题,但仍然是一个错误;)

实际上,PHP会话和AJAX有时似乎不能很好地协同工作

这意味着,
if($post->user\u id==$user\u id)
将永远不会验证,因此存在非删除问题

有两种方法可以看到这一点:

  • 记录
    $user\u id
    并查看它是否为
    null
  • 尝试用ajax帖子发送
    $\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!");
        }
    });