jQuery $ .ajax сообщение в файл PHP не работает

Так что это связано с проблемой вчера, которая быстро вышла из-под контроля, поскольку ошибки были необычными. Эта проблема все еще существует, но вопрос здесь был приостановлен, и меня попросили реформировать новый вопрос, который теперь относится к текущей проблеме. Итак, идем.

Проблема носит базовый характер. Если вы вчера помогали, я переключился с $ .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», которое является значением переменной «помощь» и ожидается. Второе предупреждение пустое.

Теперь вот где я запутался. Если сообщение отправляется со значением 6. Не установлено ли значение $ _POST ['aid']? Также, если это правда, мой код не должен выполнять часть моего условного оператора if а не my 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 } 

и просто скопируйте переменную $ help, подобную этой

 $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, и в соответствии с этим эти методы устарели или будут устаревшими. В любом случае это привело к разнице в результатах.

В любом случае вопрос сейчас. Почему это, если я использовал простую версию, я возвращаю обратно свою переменную $ help '6'. Однако, когда я пытаюсь выполнить свой запрос, я ничего не получаю. Также, пожалуйста, попробуйте вспомнить, если я жестко код 6, таблица создает.

Я думаю, что это может быть ошибка:

 data: aid, 

должен быть

 data: {'aid':aid}, 

Это даст метку $ _POST ['aid'] и значение, которое вы ищете на своей php-странице.

РЕДАКТИРОВАТЬ:

Если у вас возникли проблемы с этим, я бы упростил его для тестирования, основные причины таких вещей, которые не работают в моем опыте:

он не доходит до файла

он достигает файла, но файл ожидает чего-то другого, чем он получает, и из-за структур управления он ничего не возвращает

он достигает файла с правильными данными, но есть и другие ошибки в файле php, которые мешают ему когда-либо возвращать его.

Вы можете легко исключить каждый из них в своем случае.

Параметр данных jQuery для метода ajax должен быть объектом, например {'aid': aid} . Я думаю, это твоя проблема. Я также заметил, что у вашего всегда метода отсутствует параметр для данных.

Если вы сейчас правильно публикуете данные, проблема может быть на вашей странице PHP? Включить init.php не удалось изменить значение $ _POST ['aid'] не так ли?

Я не уверен, что это должно вести себя так, как правило, вы делаете так:

 $.ajax({ //... }) .done(function(data){ //... }); 

Просто сделайте это так:

 var fetch = true; var url = 'someurl.php'; $.ajax( { // Post the variable fetch to url. type : 'post', url : url, dataType : 'json', // expected returned data format. data : { 'aid' : aid }, success : function(data) { // This happens AFTER the backend has returned an JSON array (or other object type) var res1, res2; for(var i = 0; i < data.length; i++) { // Parse through the JSON array which was returned. // A proper error handling should be added here (check if // everything went successful or not) res1 = data[i].res1; res2 = data[i].res2; // Do something with the returned data } }, complete : function(data) { // do something, not critical. } }); 

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

Пытаться

 include "{$_SERVER['DOCUMENT_ROOT']}/TrakFlex/core/init.php"; 

вместо этого команда $ _SERVER [DOCUMENT_ROOT] witout не будет работать. Когда вы используете массив в строке, вам нужны эти скобки.