一尘不染

jQuery $ .ajax发布到PHP文件不起作用

ajax

因此,这源于昨天的一个问题,由于错误不寻常,该问题迅速失控。这个问题仍然存在,但是这里的问题被搁置,我被要求改革一个新问题,该问题现在与当前问题有关。所以我们开始。

这个问题本质上是基本的。如果您昨天在帮忙,我已经从$ .post切换到$
.ajax帖子,以将变量传递到我的PHP文件中。但是,我的PHP文件似乎从未收到此变量,表明索引为“未定义”。

现在,这通常意味着该变量不包含任何值,命名错误或发送错误。经过一整天的混乱(杀死我),我仍然没有理由认为我的PHP文件不应该接收此数据。因为我还很陌生,所以我真的希望有人可以发现一个明显的错误或推荐其他可能的解决方案。

这是代码

jQuery的

$('#projects').click(function (e) {
alert(aid); 
$.ajax({    
    url:'core/functions/projects.php',
    type: 'post',
    data: {'aid' : aid},
    done: function(data) {
    // this is for testing
    }
    }).fail (function() {
        alert('error');
    }).always(function(data) {
        alert(data);                                        
        $('#home_div').hide();          
        $('#pcd').fadeIn(1000);
        $('#project_table').html(data); 
    });         
});

的PHP

<?php

include "$_SERVER[DOCUMENT_ROOT]/TrakFlex/core/init.php";

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];               
    try {
        $query_projectInfo = $db->prepare("
            SELECT  projects.account_id,
                    projects.project_name,                  
                    projects.pm,    
                    //..irrelevant code      
            FROM projects
            WHERE account_id = ?                        
        ");

        $query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
        $query_projectInfo->execute();
        $count = $query_projectInfo->rowCount();

        if ($count > 0) {
            echo "<table class='contentTable'>";
            echo "<th class='content_th'>" . "Job #" . "</th>";
            echo "<th class='content_th'>" . "Project Name" . "</th>";
            //..irrelevant code          
            while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {                
                echo "<tr>";
                echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
                echo "<td class='content_td'>" . $row['project_name'] . "</td>"; 
                //..irrelevant code
                echo "</tr>";
            }
            echo "</table>";            
        }       
    } catch(PDOException $e) {
        die($e->getMessage());
    }   
} else {
    echo 'could not load projects table';
}

?>

通过按“ #projects”运行此代码时,我会收到2条警报。第一个警报显示为“ 6”,这是变量“ aid”的值,是预期值。第二个警报为空白。

现在这是我感到困惑的地方。如果帖子的发送值为6。是否未设置$ POST [‘aid’]?同样,如果这是真的,我的代码是否应该执行if条件语句的一部分
_而
不是我的else?。无论哪种方式,这都让我感到奇怪。我不应该从文件中收到 一些东西PHP吗?

因此,我们相信Firebug是吧?如果我打开Firebug并像这样通过,
Firebug -> POST projects.php -> XHR -> POST(tab) ->
我会在“参数”窗口中看到6,在“源”窗口中看到“ 6”。然后,如果我单击“响应”和“ HTML”选项卡,它们都没有任何价值。

所以无论如何,那堵墙是我的问题。再一次,我真的希望有人能在这里帮助我。我不想再浪费时间在应该是一个简单的解决方案上。

编辑

如果我将我的php文件更改为如下所示

<?php

if(isset($_POST['aid'])) {  
    $aid = $_POST['aid'];
    echo $aid;
} else {
    echo 'fail';    
}

现在的响应是“ 6”!万岁!我们取得了突破!现在为什么不加载查询产生的表?

旁注 如果我拿走了

if(isset($_POST['aid'])){
//all my code
} else {
    //response
}

然后像这样硬编码变量$ aid

$aid = '6';

然后PHP直接运行文件,查询成功,页面将加载其动态创建的表。

也是为了回答要求我使用的答案之一

$('#projects').click(function (e) {
    alert(aid); 
    $.ajax({    
        url:'core/functions/projects.php',
        type: 'post',
        data: aid,
        success: function(data) {
        // this is for testing
        }
        }).error (function() {
            alert('error');
        }).complete (function(data) {
            alert(data);                                        
            $('#home_div').hide();              
            $('#pcd').fadeIn(1000);
            $('#project_table').html(data); 
        });     
});

我正在使用该方法,但是我正在使用jQuery
v1.10.2,根据方法,这些方法已经或将被弃用。无论哪种方式,结果的差异为0。

无论如何,现在的问题是。如果使用简单版本,为什么会得到回显$ aid变量“ 6”的原因。但是,当我尝试使用它运行查询时,我 什么
也没得到。另外请尝试记住如果我对表6进行了硬编码。


阅读 224

收藏
2020-07-26

共1个答案

一尘不染

我认为这可能是错误:

data: aid,

它应该是

data: {'aid':aid},

这将提供$ _POST [‘aid’]标签和您在php页面中寻找的值。

编辑:

如果您对此有疑问,我将其简化以进行测试,以我的经验来看,这种事情不起作用的主要原因是:

它没有到达文件

它正在到达文件,但是文件期望的内容与接收的内容有所不同,并且由于控制结构的原因,它没有返回任何内容

它正在使用正确的数据到达文件,但是php文件中还有其他错误阻止它返回。

您可以轻松排除每种情况。

2020-07-26