所以这源于昨天的一个问题,由于错误不正常,很快就会失控。这个问题仍然存在,但问题被搁置,here,我被要求改革一个现在与当前问题有关的新问题。然后我问了一个问题here,然后事情很快就摆脱了主题。我决定接受解决原始问题并继续前进的答案。我现在相信我们已将问题缩小到一个非常具体的问题。
这个问题现在对我有意义。我有以下代码
的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';
}
?>
当我通过按'#projects'运行此代码时,我收到2个警报。第一个警报显示'6',这是变量'aid'的值,并且是预期的。第二个警报是空白的。
现在我在这里得到了非常的困惑。如果我通过将PHP
文件更改为此类
<?php
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
响应现在为'6'!这意味着该文件正在接收我的$ _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());
}
?>
然后直接运行PHP
文件,查询成功,页面加载动态创建的表。这让我的头旋得太厉害了,我想呕吐。
所以在审查中。辅助变量设置为6,毫无疑问。如果我简化我的PHP
文件,它会收到$ _POST ['aid']变量,获取数据,设置PHP
$ aid变量并回显它。但是,如果我尝试将其插入到我的查询中以使我的桌子充气,我会得到没有。现在,如果我将PHP
文件更改为而不是依赖于$ _POST ['aid']变量,它就可以正常工作。那么到底是怎么回事? PHP
文件在没有帖子和帖子的情况下工作,没有表格膨胀查询。
我真的希望有人可以帮助我解决这个问题因为我完全迷失了
修改
我改变了我的php文件进行测试。它现在看起来非常像这样。对不起墙
<?php
include "{$_SERVER['DOCUMENT_ROOT']}/TrakFlex/core/init.php";
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
try {
$query_projectInfo = $db->prepare("
SELECT projects.account_id,
projects.project_name,
projects.pm,
projects.apm,
projects.est_start,
projects.est_end,
projects.contact,
projects.trips,
projects.tasks,
projects.perc_complete,
projects.bcwp,
projects.actuals,
projects.cpi,
projects.bcws,
projects.bac,
projects.comments,
projects.status,
projects.project_revenue,
projects.profit_margin,
projects.pm_perc,
projects.audited
FROM projects
WHERE account_id = ?
");
$query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
$query_projectInfo->execute();
echo "<table class='contentTable'>";
echo "<th class='content_th'>" . "Job #" . "</th>";
echo "<th class='content_th'>" . "Project Name" . "</th>";
echo "<th class='content_th'>" . "PM" . "</th>";
echo "<th class='content_th'>" . "APM" . "</th>";
echo "<th class='content_th'>" . "Est. Start" . "</th>";
echo "<th class='content_th'>" . "Est. End" . "</th>";
echo "<th class='content_th'>" . "Contact" . "</th>";
echo "<th class='content_th'>" . "Trips" . "</th>";
echo "<th class='content_th'>" . "Tasks" . "</th>";
echo "<th class='content_th'>" . "% Complete" . "</th>";
echo "<th class='content_th'>" . "BCWP" . "</th>";
echo "<th class='content_th'>" . "Actuals" . "</th>";
echo "<th class='content_th'>" . "CPI" . "</th>";
echo "<th class='content_th'>" . "BCWS" . "</th>";
echo "<th class='content_th'>" . "BAC" . "</th>";
echo "<th class='content_th'>" . "Comments" . "</th>";
echo "<th class='content_th'>" . "Status" . "</th>";
echo "<th class='content_th'>" . "Project Revenue" . "</th>";
echo "<th class='content_th'>" . "Profit Margin" . "</th>";
echo "<th class='content_th'>" . "PM%" . "</th>";
echo "<th class='content_th'>" . "Audited" . "</th>";
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>";
echo "<td class='content_td'>" . $row['pm'] . "</td>";
echo "<td class='content_td'>" . $row['apm'] . "</td>";
echo "<td class='content_td'>" . $row['est_start'] . "</td>";
echo "<td class='content_td'>" . $row['est_end'] . "</td>";
echo "<td class='content_td'>" . $row['contact'] . "</td>";
echo "<td class='content_td'>" . $row['trips'] . "</td>";
echo "<td class='content_td'>" . $row['tasks'] . "</td>";
echo "<td class='content_td'>" . $row['perc_complete'] . "</td>";
echo "<td class='content_td'>" . $row['bcwp'] . "</td>";
echo "<td class='content_td'>" . $row['actuals'] . "</td>";
echo "<td class='content_td'>" . $row['cpi'] . "</td>";
echo "<td class='content_td'>" . $row['bcws'] . "</td>";
echo "<td class='content_td'>" . $row['bac'] . "</td>";
echo "<td class='content_td'>" . $row['comments'] . "</td>";
echo "<td class='content_td'>" . $row['status'] . "</td>";
echo "<td class='content_td'>" . $row['project_revenue'] . "</td>";
echo "<td class='content_td'>" . $row['profit_margin'] . "</td>";
echo "<td class='content_td'>" . $row['pm_perc'] . "</td>";
echo "<td class='content_td'>" . $row['audited'] . "</td>";
echo "</tr>";
}
echo "</table>";
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'could not load projects table';
}
?>
我在浏览器中收到的回复现在是
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>
这意味着两件事。正在传递和设置辅助变量。但是当我在查询中运行它时失败了。但如果我把$ aid ='6';然后绑定援助作为其工作的价值。
为什么?
第二次编辑
因此,在其他人的帮助下,我们发现这是js
错误而不是php
错误。变量在js
中被设置为6,但它有一些隐藏的字符,我想我找到了它们。当我看到萤火虫时,我将此视为来源
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);
});
});
这可能是因为我如何得到它,我不知道。如何删除源中的额外字符?这就是我认为的问题是
答案 0 :(得分:1)
*编辑*
虽然这是公认的答案,但从某种意义上说它与真正的解决方案无关。这是评论的问题,包括这里和问题的评论,最后是来自JS文件的字符串中的CR / NL(“\ r \ n”)组合,该文件从另一个PHP文件读取......你明白了。 “如果发生奇怪的事情,请检查隐藏的字符!”
我现在没时间,星期天晚上10点工作!但..
如果我理解,这是你的问题:
定义数据时:{'aid':aid}援助尚未定义!
不要因为$('#projects').click(function (e) {
alert(aid);
之前的事实而感到困惑。单击时会调用它,因此在定义辅助时可以执行它。虽然{'aid':aid}在解析代码时获取了援助的价值,但如果没有在其上定义援助,则它将是未定义的。
如果您之前使用aid="hello";
,则点击脚本会看到它有用,或者至少会显示“你好”。
你必须小心JQuery和Ajax以及回调。准确地考虑一切都在什么时候执行,不要依赖“写在上面=先执行”。
希望这是你的问题,你可以解决它,g'nite ..:)
还有一件事......一个解决方案是在点击处理程序中准备Ajax内容。
$(“..”)。click(){ //在这里准备东西 // {'aid':aid}这里定义了援助 }
答案 1 :(得分:0)
这可能无效但请尝试更改:
type: 'post',
到
type:'POST',
如果它区分大小写,则它不会识别它并默认为$ _GET,这可以解释为什么寻找$ _POST ['aid']无效。