Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP文件接收带有奇怪行为的jQuery AJAX帖子_Php_Javascript_Jquery_Ajax - Fatal编程技术网

PHP文件接收带有奇怪行为的jQuery AJAX帖子

PHP文件接收带有奇怪行为的jQuery AJAX帖子,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,因此,这源于昨天的一个问题,这个问题很快就失去了控制,因为错误是不寻常的。这个问题仍然存在,但是这个问题被搁置了,我被要求修改一个新的问题,这个问题现在与当前的问题有关。然后我问了一个问题,事情很快就偏离了主题。我决定接受解决最初问题的答案,继续前进。我现在认为,我们已经把问题缩小到一个非常具体的问题 这个问题现在对我来说毫无意义。我有以下代码 jQuery $('#projects').click(function (e) { $.trim(aid); alert(aid); $.ajax(

因此,这源于昨天的一个问题,这个问题很快就失去了控制,因为错误是不寻常的。这个问题仍然存在,但是这个问题被搁置了,我被要求修改一个新的问题,这个问题现在与当前的问题有关。然后我问了一个问题,事情很快就偏离了主题。我决定接受解决最初问题的答案,继续前进。我现在认为,我们已经把问题缩小到一个非常具体的问题

这个问题现在对我来说毫无意义。我有以下代码

jQuery

$('#projects').click(function (e) {
$.trim(aid);
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]/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';
}

?>   
现在的回答是“6”!这意味着该文件正在接收我的$\u POST['aid']变量,并在
PHP
中正确设置它。现在,如果我把代码改回去,我同样什么也得不到

但是,如果我将原始的
PHP
文件更改为

<?php

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

    $aid = '6';             
    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());
    }    
?> 
现在,我在浏览器中得到的响应是

6<table class='contentTable'><th class='content_th'>Job #</th><th class='content_th'>Project Name</th><th class='content_th'>PM</th><th class='content_th'>APM</th><th class='content_th'>Est. Start</th><th class='content_th'>Est. End</th><th class='content_th'>Contact</th><th class='content_th'>Trips</th><th class='content_th'>Tasks</th><th class='content_th'>% Complete</th><th class='content_th'>BCWP</th><th class='content_th'>Actuals</th><th class='content_th'>CPI</th><th class='content_th'>BCWS</th><th class='content_th'>BAC</th><th class='content_th'>Comments</th><th class='content_th'>Status</th><th class='content_th'>Project Revenue</th><th class='content_th'>Profit Margin</th><th class='content_th'>PM%</th><th class='content_th'>Audited</th></table>
哪个应该是断线,对吗?我认为这就是造成错误的原因

这就是我获得援助的方式

var title;
var aid;
$(".sa").click(function (e) {
    title = $(this).text();
    $.post('core/functions/getAccountId.php', { 
        title: title              
    })
    .done(function(data) {
        aid = data;     
        $("#acc_title").html(title);    
        $('#accountsSelectDiv').hide();
        $('#acc_home').fadeIn(1000);
        $('#home_div').show();      
    })
    .fail(function(jqXHR, status, error) {
        alert(error);
    });     
});

这可能是因为我如何得到它,我不知道。如何删除源代码中的额外字符?这就是我认为的问题所在

这可能不起作用,但请尝试改变:

type: 'post',


如果它区分大小写,那么它将无法识别它并默认为$\u GET,这将解释为什么查找$\u POST['aid']不起作用。

*编辑*

虽然这是公认的答案,但它是完全错误的,从某种意义上说,它与真正的解决方案无关。这是从这里和问题的注释中得出的,最后是字符串中的CR/NL(“\r\n”)组合,该字符串来自从另一个PHP文件读取的JS文件。。。你明白了。“如果发生奇怪的事情,检查隐藏的字符!”


我现在没有时间,星期天晚上10点上班!但是

这是你的问题,如果我理解的话:

定义数据时:{'aid':aid}aid尚未定义

不要被
$('#projects')这一事实所迷惑。单击(函数(e){
alert(aid);
在前面,在它上面。单击时会调用它,因此在很可能定义了aid之后执行它。而{'aid':aid}在解析代码时接受aid的值,因此如果没有在它上面定义aid,它将是未定义的

如果您在之前输入了一个
aid=“hello”
,在单击脚本中,您将看到它工作,或者至少它将显示“hello”

您必须小心使用JQuery、Ajax和回调。请准确地考虑所有内容的执行时间,不要依赖于“在顶部编写=首先执行”

希望这是你的问题,你可以解决它,晚安:)

还有一件事..一个解决方案是在click处理程序中准备Ajax内容

$(“.”)。单击(){ //在这里准备东西 //{'aid':aid}这里定义了aid
}

我想知道(jQuery submitted)AID值是否包含硬编码AID没有的空格或类似空格。这肯定会影响WHERE子句。@这与FrancescoMM最近的回答混合在一起完全有意义。我编辑了我的问题以添加$.trim()这应该可以解决这个问题,对吗?因为更新
$query\u projectInfo->bindValue(1,$aid,PDO::PARAM\u STR);
$query\u projectInfo->bindValue(1,$aid,PDO::PARAM\u INT);
是否有任何效果?如果“6”是由js从文件(包括PHP脚本)加载的,请确保它没有与BOM一起保存为UTF-8,否则会在它之前添加一个不可见的字符。我也有它们,我理解。我想说你是正确的,但在FireFox的Firebug中,当我查看POST方法时,它仍然保持值6,这应该是在它被正确发送之后的值?也是我的
ph的简化版本p
,将无法获取此变量,它会这样做,然后返回它。aid在包含在此文件之前的另一个.js文件中定义。aid变量有值。如果我将echo$aid;添加到我的php文件中,我会得到它back@i_me_mine好的,所以可能是其他原因,您可以编写一个硬编码的{'aid':6}所以你确定你排除了js/setting aid中的任何错误或奇怪的字符,比如值中的零或BOM?试着从PHP中清除它看看我的评论。如果它起作用,你可以开始查找原因。你可能会在js中搜索生成6个valuearg的错误,在这个愚蠢的问题上浪费了这么多时间,一个我觉得这是一个愚蠢的理由。好吧,我刚看到评论,我会试试看,谢谢
aid=%0D%0A6
var title;
var aid;
$(".sa").click(function (e) {
    title = $(this).text();
    $.post('core/functions/getAccountId.php', { 
        title: title              
    })
    .done(function(data) {
        aid = data;     
        $("#acc_title").html(title);    
        $('#accountsSelectDiv').hide();
        $('#acc_home').fadeIn(1000);
        $('#home_div').show();      
    })
    .fail(function(jqXHR, status, error) {
        alert(error);
    });     
});
type: 'post',
type:'POST',