所以这源于昨天的一个问题,由于错误不寻常,该问题迅速失控。这个问题仍然存在,但问题被搁置了,在这里,我被要求修改一个现在与当前问题相关的新问题。所以我们开始吧。
这个问题本质上是基本的。如果您昨天提供帮助,我已经从 $.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 进行了硬编码。