Post jQuery $ .ajax do pliku PHP nie działa

Wynika to z wczorajszego problemu, który szybko wymknął się spod kontroli, ponieważ błędy były niezwykłe. Ten problem nadal istnieje, ale pytanie zostało zawieszone,tutaji zostałem poproszony o zreformowanie nowego pytania, które teraz odnosi się do obecnego problemu. Więc zaczynamy.

Problem ma charakter podstawowy. Jeśli pomagałeś wczoraj, zmieniłem post z $ .post na $ .ajax, aby dostarczyć zmienną do mojegoPHP plik. Jednak mójPHP wydaje się, że plik nigdy nie otrzymuje tej zmiennej stwierdzającej, że indeks jest „niezdefiniowany”.

Teraz zazwyczaj oznacza to, że zmienna nie ma żadnej wartości, jest niepoprawnie nazwana lub została wysłana niepoprawnie. Cóż, po całym dniu spędzonym na tym (zabij mnie) nadal nie widzę powoduPHP plik nie powinien odbierać tych danych. Ponieważ jestem całkiem nowy, mam nadzieję, że ktoś zauważy oczywisty błąd lub zaleci inne możliwe rozwiązanie.

Oto kod

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';
}

?>   

Po uruchomieniu tego kodu przez naciśnięcie „#projects” otrzymuję 2 alerty. Ten pierwszy alert mówi „6”, czyli wartość zmiennej „pomoc” i jest oczekiwana. Drugi alert jest pusty.

Teraz jestem zdezorientowany. Jeśli post jest wysyłany z wartością 6. Czy nie jest ustawiony zestaw $ _POST ['aid']? Również jeśli to prawda, czy mój kod nie powinien wykonywaćif część mojej instrukcji warunkowejraczej niż mojaelse? Tak czy inaczej, wydaje mi się to dziwne. Nie powinienem otrzymaćcoś z powrotem od mojegoPHP plik?

Więc w Firebug ufamy, prawda? Jeśli otworzę Firebug i przejdę w ten sposób
Firebug -> POST projects.php -> XHR -> POST(tab) ->
Widzę 6 w oknie „Parametr” i „6” w oknie „Źródło”. Następnie, jeśli kliknę karty „Odpowiedź” i „HTML”, obie nie będą miały wartości.

Tak czy inaczej, ta ściana tekstu jest moim problemem. Ponownie mam nadzieję, że ktoś może mi pomóc tutaj. Nie chciałbym marnować więcej czasu na to, co powinno być prostym rozwiązaniem.

EDYTOWAĆ

Jeśli zmienię mój plik php tak, aby wyglądał tak

<?php

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

Odpowiedź brzmi teraz „6”! Brawo! Dokonaliśmy przełomu! Dlaczego nie załaduje tabeli, która wynika z mojego zapytania?

dygresja To powinno być odnotowane pierwotnie, jeśli zabiorę

if(isset($_POST['aid'])){
//all my code
} else {
    //response
}

i po prostu twardy kod zmiennej $ aid takiej jak ta

$aid = '6';

Następnie uruchomPHP plik bezpośrednio zapytanie jest udane i strona ładuje tabelę dynamicznie tworząc.

Również w odpowiedzi na jedną z odpowiedzi proszących o użycie

$('#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); 
        });     
});

Używam tego, ale używam jQuery v1.10.2 i zgodnie zto te metody są lub będą przestarzałe. Tak czy inaczej spowodowało to 0 różnic w wynikach.

W każdym razie pytanie jest teraz. Dlaczego, jeśli użyłem prostej wersji, otrzymam echo, zwróci moją zmienną $ aid z '6'. Jednak gdy próbuję uruchomić moje zapytanie, otrzymujęnic. Spróbuj też zapamiętać, czy utrudnię kod 6, tabela tworzy.

questionAnswers(6)

yourAnswerToTheQuestion