首页 > 解决方案 > PHP 文件不接收来自 AJAX 帖子的数据

问题描述

jQuery代码:

$(document).ready(function(){
    $('.tablePend tbody').on('click','.btn',function(){
        // var id=$('#test-pend').val();
        var currow=$(this).closest("tr");
        var colId = currow.find('td:eq(3)').text();
        var id = colId;
        alert(id);
        $.post("../admin/detail.php", {
            pid:id
        });
    });
});

所以上面的代码完美运行,警报显示了我想要的结果

<?php
include('dbh.inc.php');
include_once('header.php');

if(isset($_POST['pid'])) {
    $id = mysqli_real_escape_string($conn, $_POST['pid']);
    $sql= "SELECT event_name, event_desc, event_date, event_id FROM events WHERE event_id='$id'";
    $result= mysqli_query($conn, $sql);
    echo $id;
} else {
    echo 'nothing';
}

include_once 'footer.php';
?>

所以就在这里,PHP 自动转到什么都没有显示的 else 语句,我不知道出了什么问题,我已经尝试了所有可能的方法,这几天,这真的让我很沮丧,我也相信我做了一个简单的错误,但我找不到。

标签: phpjqueryajax

解决方案


我不得不做一些调查才能得出这个答案。

您的$.post()jQuery 代码不包含成功(或错误)处理程序。这意味着无论发生什么,您都不会看到您的 PHP 文件所说的结果。但是在你的问题中,你说你可以看到nothing. 所以,这让我怀疑你根本没有通过 AJAX 提交。

您已经向我们展示了 jQuery 代码,其中您的按钮附加了一个事件处理程序。我猜你的按钮在 aa 里面<form>。当您单击表单中的按钮时,它将提交。如果您希望您的 jQuery 来处理它,您必须明确指定不应发生正常的表单提交。而您的 jQuery 代码不会那样做。

所以这一切的意思是当你点击按钮时,表单是正常提交​​的。您的事件处理程序可能会触发,并且该代码会启动,但与此同时浏览器已经移动到您的<form>目标,而 jQuery 永远不会走远。您<form>实际上并不包含id,您使用 jQuery 动态设置它。所以你结束了<form>目标,没有id发布,你nothing在页面上看到。

解决方法是停止正常的表单提交:

$(document).ready(function(){
    $('.tablePend tbody').on('click','.btn',function(event){
        event.preventDefault();
        // rest of your code

注意我已经添加了event作为参数传递给事件处理程序,然后使用了它的preventDefault()方法。.post()文档中有一个示例。


推荐阅读