jQuery $ .ajax-Post in PHP-Datei funktioniert nicht
Das liegt also an einem Problem von gestern, das schnell außer Kontrolle geriet, da die Fehler ungewöhnlich waren. Dieses Problem besteht immer noch, aber die Frage wurde auf Eis gelegt.Hierund ich wurde gebeten, eine neue Frage zu reformieren, die sich jetzt auf das aktuelle Problem bezieht. Auf geht's.
Das Problem ist grundlegender Natur. Wenn Sie gestern geholfen haben, habe ich von einem $ .post-Post zu einem $ .ajax-Post gewechselt, um eine Variable an meine zu liefernPHP
Datei. Wie auch immer, meinePHP
Datei scheint diese Variable nie zu erhalten, die besagt, dass der Index 'undefiniert' ist.
Dies würde normalerweise bedeuten, dass die Variable keinen Wert enthält, falsch benannt ist oder falsch gesendet wurde. Nun, nach einem ganzen Tag des Durcheinanders (töte mich) sehe ich immer noch keinen Grund dafürPHP
Datei sollte diese Daten nicht erhalten. Da ich ziemlich neu in diesem Bereich bin, hoffe ich wirklich, dass jemand einen offensichtlichen Fehler entdecken oder eine andere mögliche Lösung empfehlen kann.
Hier ist der Code
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';
}
?>
Wenn ich diesen Code durch Drücken von "#projects" ausführe, erhalte ich zwei Warnungen. Diese erste Warnung lautet '6'. Dies ist der Wert der Variablen 'aid' und wird erwartet. Die zweite Warnung ist leer.
Jetzt bin ich hier verwirrt. Wenn der Beitrag mit einem Wert von 6 gesendet wird. Ist das $ _POST ['aid'] nicht gesetzt? Auch wenn das stimmt sollte mein Code das nicht ausführenif
Teil meiner bedingten Aussagelieber als meineelse
? So oder so kommt mir das komisch vor. Sollte ich nicht erhaltenetwas zurück von meinemPHP
Datei?
Wir vertrauen also auf Firebug, oder? Wenn ich Firebug öffne und so durchgeheFirebug -> POST projects.php -> XHR -> POST(tab) ->
Ich sehe 6 im 'Parameter'-Fenster und' 6 'im' Source'-Fenster. Wenn ich dann auf die Registerkarten "Antwort" und "HTML" klicke, haben beide keinen Wert.
Wie auch immer, diese Textwand ist mein Problem. Auch hier hoffe ich sehr, dass mir hier jemand weiterhelfen kann. Ich würde es hassen, mehr Zeit damit zu verschwenden, was eine einfache Lösung sein sollte.
BEARBEITEN
Wenn ich meine PHP-Datei so ändere
<?php
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
Die Antwort ist jetzt '6'! Hurra! Wir haben den Durchbruch geschafft! Warum wird meine Tabelle, die sich aus meiner Abfrage ergibt, nicht geladen?
Randnotiz Dies sollte ursprünglich vermerkt worden sein, wenn ich das wegnehme
if(isset($_POST['aid'])){
//all my code
} else {
//response
}
und einfach die Variable $ aid so hart codieren
$aid = '6';
Dann starte dasPHP
Datei direkt die Abfrage ist erfolgreich und die Seite lädt die Tabelle und erstellt sie dynamisch.
Auch als Antwort auf eine der Antworten, die mich bitten, zu verwenden
$('#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);
});
});
Ich habe das benutzt, aber ich benutze jQuery v1.10.2 und lautdiese Diese Methoden sind oder werden veraltet. In beiden Fällen machte es keinen Unterschied im Ergebnis.
Sowieso ist die Frage jetzt. Warum ist es so, wenn ich die einfache Version verwende und meine $ aid-Variable '6' zurücksende? Wenn ich jedoch versuche, meine Abfrage damit auszuführen, erhalte ichnichts. Bitte denken Sie auch daran, ob ich die 6 fest codiere, die die Tabelle erstellt.