7 Stimmen

Einfaches Ajax-Jquery-Skript - Wie kann ich Informationen für jede der Zeilen in der Tabelle abrufen?

Ich folge einem einfachen Ajax>PHP>MySQL-Beispiel, das hier veröffentlicht wurde http://openenergymonitor.org/emon/node/107

Ich kann nur Informationen aus der ersten Zeile anzeigen. Meine Tabelle ist so aufgebaut

--------------
|  id  | name|
--------------
| 1    | Pat |
| 2    | Joe |
| 3    | Rob |
--------------

Der PHP-Code

 $result = mysql_query("SELECT * FROM $tableName");          //Abfrage
 $array = mysql_fetch_row($result);                          //Ergebnis abrufen  
 echo json_encode($array);

Das Skript

$(function () 
  {
    $.ajax({                                      
      url: 'api.php', data: "", dataType: 'json',  success: function(data)        
      { 
        var id = data[0];              //ID abrufen
        var vname = data[1];           //Name abrufen
         $('#output').html("ID: "+id+" Name: "+vname); 
      } 
    });
  }); 

ZEILE 1

Wenn ich var id = data[0]; setze, erhalte ich den Wert 1. Wenn ich var name = data[1]; setze, erhalte ich Pat.

ZEILEN 2 und 3 sind undefiniert

Beispiel var id=data[2]; gibt undefiniert zurück etc

Meine Fragen

  1. Warum erhalte ich nur die Werte aus der ersten Zeile?

  2. Wie kann ich Informationen für Zeilen außer der ersten erhalten?

Laut anderen Fragen auf Stackoverflow muss ich wahrscheinlich eine While-Schleife verwenden, aber ich bin mir nicht wirklich sicher warum oder wie.

20voto

ComFreek Punkte 28122

Die alte MySQL-Erweiterung mysql ist veraltet, es ist besser mysqli oder PDO zu verwenden!

mysql_fetch_row() gibt nur 1 Zeile zurück! Du musst es in einer Schleife verwenden, zum Beispiel:

$data = array();
while ( $row = mysql_fetch_row($result) )
{
  $data[] = $row;
}
echo json_encode( $data );

Du musst auch das JavaScript ändern:

$.ajax({                                      
  url: 'api.php', data: "", dataType: 'json',  success: function(rows)        
  {
    for (var i in rows)
    {
      var row = rows[i];          

      var id = row[0];
      var vname = row[1];
      $('#output').append("id: "+id+" name: "+vname)
                  .append("");
    } 
  } 
});

Übrigens empfehle ich dir, mysql_fetch_assoc() zu verwenden, da es deinen Code flexibler und sauberer macht.

0voto

Elfaks Punkte 1
$result = mysql_query("SELECT * FROM $tableName");
$array = array(mysql_fetch_row($result));

// Um jede Zeile im $array zu speichern
while($row = mysql_fetch_row($result)) { 
    $array[] = $row; 
} 
echo json_encode($array);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X