【问题标题】:AJAX request failing to be recognized as POST by PHP script [closed]AJAX 请求未能被 PHP 脚本识别为 POST [关闭]
【发布时间】:2019-07-03 12:38:22
【问题描述】:

我正在尝试将表单发布到 PHP 脚本,但它在将请求验证为 POST 请求时卡住了,因此它从 PHP 脚本中退出。 AJAX 请求返回成功,但从数据库返回的数据表明请求识别为 POST 失败。我已经尝试更改内容类型等,但无济于事。

JS:

$(document).ready(function() {

    $("#delete4").on('click', function(e) {
        e.preventDefault();
        var ok = confirm('Are you sure you want to delete this?');
        if (ok == true)
        {
            console.log("true")
            var data = $("#form4").serialize();
            $.ajax({
                     data: data,
                     type: "post",
                     url: "delete_AJAX.php",
                     success: function(data) {
                        console.log("successfully deleted");
                        console.log(data);
                        //$("#div4").remove();
                     },
                     error: function(data) {
                          alert("fail");
                          console.log(data);
                      }
            });
        } else {
            return;
        }
    }); 
});

HTML:

<form type="text" name="form4" id="form4" action="delete_AJAX.php" method="post">
    <div class="aligner">
        <button type="button" class="button_div" name="edit" onclick="send(52)">Edit</button>
        <button type="button" class="button_div" id="delete4">Delete</button>
        <button type="button" class="button_div" name="read" onclick="send2(52, 13)">See</button>
    </div><br>
    <input type="hidden" id="hidden_c4" value="13" name="hidden_c">
    <input type="hidden" id="hidden_bid4" name="hidden_bid" value="52">
</form> 

PHP:

require_once("db.php");
if ($_REQUEST['REQUEST_METHOD'] === 'POST')
{

    $bid = $_POST['hidden_bid'];
    echo "passed request";

    $sql = "SELECT * FROM xxx WHERE yyy = $bid";
    $result = mysqli_query($connection, $sql);
    if ($result === false)
    {
        die("f1");
    }
    $resultCheck = mysqli_num_rows($result);
    if (!resultCheck > 0)
    {
        echo "ERROR NO RESULT";
        exit();
    };
    $row = mysqli_fetch_assoc($result);
    $delete_cover = $row['cover'];
    unlink($delete_cover);



    // updating table row
    $sql2 = "DELETE FROM xxx WHERE (yyy=?);";
                $stmt = mysqli_stmt_init($connection);
                if (!mysqli_stmt_prepare($stmt, $sql2))
                {
                    header("Location: ../create.php?error&prepare1111");
                    exit();
                }
                else
                { 
                    $stmt->bind_param("i", $bid);
                    mysqli_stmt_execute($stmt);
                    mysqli_stmt_close($stmt);
                    $connection->close();
                    echo "successfully deleted";
                }

} else {
    echo "FAILURE TO REQUEST";
}           

所以我一直在失败“请求失败”,当我移除脚本的任何障碍时,帖子显示为空,并且变量未设置。因此它在“f1”错误处停止。任何帮助都会很棒!谢谢!

【问题讨论】:

  • 不知道,当你知道你的方法是 POST 时,为什么还要使用 $_REQUEST,我知道这不是问题。首先检查浏览器控制台的参数
  • 第二次使用print_r($_REQUEST)if ($_REQUEST['REQUEST_METHOD'] === 'POST') 之前使用这个
  • 你使用了错误的变量:它应该是if ($_SERVER['REQUEST_METHOD'] === 'POST')
  • TYPO if ($_SERVER['REQUEST_METHOD'] === 'POST')找对地方
  • 哦,那行得通,我认为问题不在于那里,因为如果我去掉 if 语句,它仍然不会通过。但是服务器工作得很好!非常感谢:)

标签: javascript php jquery ajax forms


【解决方案1】:

您似乎为“REQUEST_METHOD”使用了错误的全局变量。 而不是$_REQUEST['REQUEST_METHOD'] 使用$_SERVER['REQUEST_METHOD']

【讨论】:

    【解决方案2】:

    在条件句中,

    $_REQUEST['REQUEST_METHOD'] 应替换为 $_SERVER['REQUEST_METHOD']

    【讨论】:

      【解决方案3】:

      也许这有帮助

      if( $_POST ) {
          echo 'posted';
          //do some stuff
      }
      

      【讨论】:

      • 一个解释会很好,但这也可以解决 OP 的问题。
      猜你喜欢
      • 2012-12-21
      • 1970-01-01
      • 2012-09-04
      • 2020-08-03
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      相关资源
      最近更新 更多