gpt4 book ai didi

php - 从 jQuery 接收 $.post 时索引未定义?

转载 作者:行者123 更新时间:2023-11-30 05:46:05 26 4
gpt4 key购买 nike

关闭。这个问题需要details or clarity .它目前不接受答案。












想改进这个问题?通过 editing this post 添加详细信息并澄清问题.

8年前关闭。




Improve this question




我收到一个非常不言自明的错误。然而,据我所知,索引不仅是 100% 定义的,它还包含一个值。这是今天让我发疯的一系列愚蠢问题中的最新一个。

这是您可能已经看过一百万次应该可以工作的代码。

jQuery

$('#projects').click(function (e) {
alert(aid);
$.post('core/functions/projects.php', { aid: aid })
.done(function(data) {
alert(aid);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});

它以 6 的值提醒我两次

PHP
<?php
require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";
if(isset($_POST)) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
?>

我收到此错误:
Notice: Undefined index: aid in C:\xampp\htdocs\core\functions\projects.php on line 5

所以我在 if else 中添加了更深入的检查,现在看起来像这样
<?php
require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";
$account_id;
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}

现在它吐了 fail .我已经去了 here ,检查错误,它与我想象的完全一样。这并不意味着为什么我得到它对我来说更有意义。

所以让我们回顾一下。我的 jQuery , 正在向右 PHP文件,因为我收到了来自该特定 PHP 的响应文件。我的变量有一个值,因为 jQuery提醒我两次,它的值是 6。但是我的 PHP文件没有收到这个值?有人可以向我解释为什么吗?

编辑

如果我在我的 jQuery 中添加一行我收到另一条消息,验证正在发送数据。然而我 仍然 收到 $_POST 索引未设置的错误。这太疯狂了
$('#projects').click(function (e) { 
alert(aid);
$.post('core/functions/projects.php', { aid: aid })
.done(function(data) {
alert(aid);
alert(data);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});

现在我得到 3 个警报框,其值为 6。

1 个警报框在帖子发送前触发,$aid 变量信息为 '6'
使用 $aid 变量 '6' 再次接收到数据后会触发 1 个警报框
现在收到数据后会触发 1 个警报框,php 响应再次为“6”!

我是说WTF?这场噩梦会结束吗?这意味着即使是 php 中的变量正在从帖子中设置!这怎么可能?我的意思是看 php它所回显的代码要么是“失败”,要么是 $aid 并且 $aid 不能有一个值,除非它是由帖子设置的,而且它不会给我未定义索引的错误。我需要休息一下,我会失去它。

Firebug

在 Firebug 我看到

我看到 POST ->
项目.php->
发布->
参数 ->
援助 6 ->
源 -> 援助=%0D%0A6
回应 ->

响应中没有任何内容,我在这里发布响应的短暂时间是因为我关闭了“require_once”并且我的代码被注释掉了。

不过,源代码中有一些奇怪的东西。它说 SOURCE aid=%0D%0A6 而不是正常的 SOURCEaid = 6

第二次编辑

我注释掉了一大段代码来简化这个例子。该代码使用变量和查询的数据。然后返回在 php 中创建的表.如果取消注释代码,我可以在我的 RESPONSE 中以 html 形式看到表格。如果我转到 HTML,我实际上可以看到可视表。发生什么了?为什么该响应会膨胀我的 div 而不是表格?我现在将发布更多代码来解释
<?php
require_once "$_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,
//...more columns
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>";
//...more table headers
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>";
//.. more data
echo "</tr>";
}
echo "</table>";
}
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'could not load projects table';
}

?>

所以你可以看到我的完整 php 文件实际上发回了一个数据表。我可以在 FireBug -> NET -> XHR -> HTML 中看到这个表。我还可以在 FireBug -> NET -> XHR -> RESPONSE 中看到所有 php 代码。但是应该保存表格的 div 只保存 else语句“无法加载项目表”。所以我想我越来越近了,但我仍然卡住了。有任何想法吗?

最佳答案

POST -> aid 6表明服务器确实在接收数据。在 $_POST 到达 if 之前的某个时间点,其他东西正在清除它。陈述。

虽然你有 require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";注释掉,你的 jQuery data包含预期值。当您发布 Firebug 信息时,它仍然被注释掉,因此数据库连接错误消息。这些消息,您已经删除,表明 projects.php 的第 7 行有错误,这告诉我您测试的文件比您在此处发布的代码更多。人们向我们展示他们的部分代码并不少见,事实上,这是鼓励的;但是,在这种情况下,这是有问题的,因为错误不在您提供给我们的代码中。

为了验证这一发现并保持理智,请将 projects.php 临时重命名为 projects.backup.php。
创建一个名为“projects.php”的新文件并通过 AJAX 运行以下代码(并且仅运行以下代码):

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

顺便说一句,%0D%0A 是 Windows® 换行组合,CRLF(回车 + 换行)

关于php - 从 jQuery 接收 $.post 时索引未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17903067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com