JS/Ajax Ausgabeproblem

Registrierer

Erfahrenes Mitglied
Ich habe
PHP:
<?PHP require_once 'test_sql.php'; ?>
<!DOCTYPE html>
<html>
 <head>
  <script type="text/javascript" src="../autofill/jquery-1.11.0.min.js"></script>
  <script type="text/javascript">
   $(document).ready(function()  {
    var data = { 'jahr[]' : []};
    $(":checked").each(function() {
     data['jahr[]'].push($(this).val());
    });
    $.POST("test.sql.php", data);
   });
  </script>
 </head>
 <body>
  <form>
   <input type="checkbox" name="jahr" value="2001" checked="checked">2001<br>
   <input type="checkbox" name="jahr" value="2002" checked="checked">2002<br>
  </form>
 </body>
</html>
Die test_sql.php enthält lediglich
Code:
echo "POST:<pre>". print_r($_POST, true) ."</pre>";

Es werden leider keine Werte übergeben, was ist verkehrt?
 
Hallo Registrierer

Was meinst du damit, dass keine Werte übergeben werden? Du sendest ja nur den Request, aber die Antwort in der dein echo steht verarbeitest du ja nicht. Zudem machst du ja mit dem require am Anfang bereits eine Ausgabe bevor du dein HTML-Dokument beginnst. Irgendwas stimmt da nicht. jQuery nennt die Methode für einen POST-Request soweit ich weiss auch post und nicht POST.

Viele Grüsse
Cromon
 
Das sind meine ersten Gehversuche in diese Richtung.
Ziel ist: mehrere Checkboxen sollen beim klickn sozusagen in Echtzeit eine Datenbankabfrage steuern.

Mein Halbwissen reicht da wohl eher (noch) nicht ;-)
 
Ich hab jetzt folgendes:
PHP:
<html>
 <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script type="text/javascript">
   $(document).ready(function(){
    function anzeige() {
     var arr = $.map($('input:checkbox:checked'), function(e, i) {
     return +e.value;
    });
     $('span').text('' + arr.join(','));
     var data = '' + arr.join(',');
    }
    anzeige();
    $('form').delegate('input:checkbox', 'click', anzeige);

    $.ajax({
     url: "test_aaa.php",
     type: "POST",
     data: {jahr: "data"}
    })
   });
  </script>
 </head>
 <body>
  <form>
   <input type="checkbox" value="2000" name="jahr[]">2000<br>
   <input type="checkbox" value="2001" name="jahr[]">2001<br>
   <input type="checkbox" value="2002" name="jahr[]">2002<br>
  </form>
  <span></span>
<?php
if (isset($ergebnis)) {
 while($jahre = $ergebnis->fetch()) {
  echo $jahre['JAHR'].'<br>';
 }
}
?>
 </body>
</html>
Die Datei test_aaa.php enthält die DB Abfrage:
PHP:
<?php
include ('datenbankverbindung.php');
if (isset($_POST['jahr'])) {
 $ergebnis = $pdo->query("SELECT JAHR FROM rechnungen WHERE JAHR IN (".implode(",", $_POST['jahr']).") GROUP BY JAHR");
}
?>
Das Ergebnis der geklickten Checkboxen wird mir angezeigt und befindet sich ausserdem in der Variablen data.
Es gelingt mir aber nicht, die Abfrage in der test_aaa.php zu laden bzw. die Daten dorthin zu übermitteln um die Abfrage bei jedem Klick zu aktualisieren.

Was muß ich tun?
 
Mir scheint, das Problem ist folgendes: In deiner HTML-Datei hast Du PHP-Code:
Code:
<?php
if (isset($ergebnis)) {
 while($jahre = $ergebnis->fetch()) {
  echo $jahre['JAHR'].'<br>';
 }
}
?>
Dieser wird jedoch nur beim Laden der Seite ausgeführt und nicht etwa, wenn deine test_aaa.php ausgeführt wurde. Du musst deine test_aaa.php so erweitern, dass sie das Ergebnis ausgibt und beim Aufruf von ajax den Callback für success hinzufügen, der die empfangenen Daten auswertet und z. B. in ein HTML-Element einträgt. Das Ergebnis liegt erst vor, wenn der success-Callback aufgerufen wird.
 
Du musst deine test_aaa.php so erweitern, dass sie das Ergebnis ausgibt und beim Aufruf von ajax den Callback für success hinzufügen, der die empfangenen Daten auswertet und z. B. in ein HTML-Element einträgt. Das Ergebnis liegt erst vor, wenn der success-Callback aufgerufen wird.
In der test_aaa.php möchte ich gar nichts erweitern oder ausgeben, dort soll lediglich die DB Abfrage passieren. Leider bekomme ich mit folgendem Quelltext auch keinen Fehler angezeigt.

Code:
$(document).ready(function(){
 function anzeige() {
  var arr = $.map($('input:checkbox:checked'), function(e, i) {
   return +e.value;
  });
  $('span').text('' + arr.join(','));
  var data = '' + arr.join(',');
 }
 anzeige();
 $('form').delegate('input:checkbox', 'click', anzeige);

 $.ajax({
  url: "test_aaa.php",
  type: "POST",
  data: {jahr: "data"},
  success: function(data) {
   var json = $.parseJSON(data);
   alert("Daten: "+ json);
  },
  error: function(){
   alert("Fehler");
  }
 })
});
 
Mit dem success-Callback bist Du jetzt schon auf dem richtigen Wege. Aber:
In der test_aaa.php möchte ich gar nichts erweitern oder ausgeben, dort soll lediglich die DB Abfrage passieren.
Ich fürchte, ohne das wirst Du nicht zum Ziel kommen. Wie sollen denn die Daten an den Client zurück gelangen? Ich empfehle dir, zunächst mal ein Tutorial über jQuery-Ajax durchzuarbeiten.
 
Naja, ich hatte dir keinen fertigen Code gegeben, weil:
  1. Wenn ich mir dein jQuery ansehe, habe ich den Eindruck, dass Du gute Kenntnisse im Programmieren allgemein hast und dir eine Lösung selbstständig erarbeiten kannst. Was dir jedoch anscheinend fehlt, ist ein grundlegendes Verständnis für die Funktion von Ajax, daher meine Empfehlung für ein Tutorial. Ich kann nicht sehen, was daran nicht zielführend ist. Nicht zielführend ist es dagegen, wenn Du Änderungsvorschläge ohne Kenntnis der Funktion pauschal ablehnst.
  2. Es zu aufwändig ist, Testseiten zu erstellen, da dein PHP auf eine Datenbank zugreift.
 
Zuletzt bearbeitet:
Wenn im 10. Beitrag kein merklicher Fortschritt zu verzeichnen ist und sich auch nicht andeutet, liegt es entweder am Fragesteller, den Antworten, oder beidem.
Und da Du im Punkt 1 nicht ganz falsch liegst, siehe #8.
 
Zurück