index undefined при получении $ .post из jQuery?

Я получаю очень понятную ошибку. Однако индекс, насколько я могу судить, определяется не только на 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'; } 

и теперь он плюет обратно. Я уже побывал здесь , чтобы проверить ошибку, и это точно так, как я и думал. Это не значит, что мне становится все больше смысла, почему я его получаю.

Так что давайте посмотрим. Мой 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'
1 появляется после того, как данные снова получены с помощью переменной $ help '6'
1 появляется после того, как данные получены теперь с ответом php, который снова «6»!

Я имею в виду WTF? Неужели этот кошмар закончится? Это означает, что даже переменная php устанавливается из сообщения! Как это возможно? Я имею в виду, посмотрите на php код, все это echos либо «сбой», либо $ help и $ aid can not имеют значение, если оно не установлено в сообщении, и, кроме того, это НЕ даст мне ошибку Undefined index. Мне нужно пойти отдохнуть, я потеряю его.

поджигатель

В firebug я вижу

Я вижу POST ->
projects.php ->
POST ->
ПАРАМЕТРЫ ->
помощь 6 ->
ИСТОЧНИК -> помощь =% 0D% 0A6
ОТВЕТ ->

В ответе ничего не было, короткое время, когда я отправил ответ, было потому, что я оставил свой запрос «require_once», и мой код был прокомментирован.

Однако в источнике есть что-то странное. Он говорит, что SOURCE aid =% 0D% 0A6 вместо обычного SOURCE aid = 6

2ND EDIT

У меня был большой раздел кода, прокомментированный, чтобы упростить этот пример. Код использует переменную и запрос для данных. Затем возвращает таблицу, созданную в php . Если не комментировать код, я могу увидеть таблицу в моем ответе в форме 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. Я также могу увидеть весь код php в FireBug -> NET -> XHR -> RESPONSE. Однако div, который должен содержать таблицу, содержит только оператор else , который не мог загрузить таблицу проектов. Поэтому я думаю, что я приближаюсь, но я все еще застрял. Есть идеи?

POST -> aid 6 показывает, что сервер действительно получает данные. Что-то еще очищает $ _POST в какой-то момент, пока не достигнет оператора if .

Хотя у вас есть require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php"; закомментировал, что ваши data jQuery содержат ожидаемое значение. Он все еще был прокомментирован, когда вы разместили информацию Firebug, а значит, сообщения об ошибках подключения к базе данных. Те сообщения, которые вы с тех пор удалили, указывают на ошибки в строке 7 project.php, которые говорят мне, что вы тестируете файл с большим количеством кода, чем вы разместили здесь. Нередко люди показывают нам часть своего кода, на самом деле, это поощряется; однако в этом случае это проблематично, потому что ошибка не лежит в коде, который вы нам дали.

Чтобы подтвердить это открытие и сохранить свое право на звание, временно переименуйте project.php в project.backup.php . Создайте новый файл под названием «projects.php» и запустите следующий код (и ТОЛЬКО следующий код) через AJAX:

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

Кстати,% 0D% 0A – это комбинация новой строки Windows®, CRLF (возврат каретки + линия)