2016-09-08 4 views
0

Ich habe eine MySQL-Datenbank, ich benutze Ajax, um es über PHP abzufragen, es funktioniert gut, wenn nur eine einzige Zeile zurückgegeben wird es Fehler heraus, wenn mehrere Zeilen zurückgegeben werden.Umgang mit mehreren db Zeilen mit Ajax und JSON

Hier ist der Code, den ich benutze, jede Hilfe wäre sehr geschätzt.

$('button').click(function(){  
    event.preventDefault(); 
    var box = document.getElementById('machine'); 
    var rdata; 
    var id= box.options[box.selectedIndex].text;  

    $.ajax({          
     url: 'machine_report.php',    
     data: 'machine=' + id,   
     dataType: 'json',      
     success: function(rdata) 
     {                
    var uid = rdata[0];    
    var date = rdata[1];   
    var time = rdata[2];   
    var machine =rdata[3];   
    var reps = rdata[4]; 
    var sets = rdata[5]; 
    var weight = rdata[6]; 
    var settings = rdata[7]; 

    $('#status').html("<b>id: </b>"+uid+"<b> date: </b>"+date + "<b>  Machine: </b>" + machine + "<b> reps: </b>" + reps + "<b> sets: </b>" + 
    sets + "<b> weight: </b>" + weight + "<b> settings: </b>" + settings); 
     }, 
    error: function(xhr,textStatus, errorThrown) { 
    $("#status").html("xhr=" + xhr + "textStatus=" + textStatus + "errorThrown= " + errorThrown); 

    }  
    }); 

    }); 

PHP-Code

<?php 
require_once("connect.php"); 
$machine = $_GET['machine']; 
$mysql="SELECT * FROM workouts WHERE machine LIKE '$machine' ORDER BY uid DESC"; 
$result=mysqli_query($con,$mysql); 
if (!$result) { 
    printf("Error: %s\n", mysqli_error($con)); 
    exit(); 
} 
$rowCount = mysqli_affected_rows($con); 
while($row = mysqli_fetch_array($result)){ 
$date = $row['date']; 
$time = $row['time']; 
$machine = $row['machine']; 
$reps = $row['reps']; 
$sets = $row['sets']; 
$weight = $row['weight']; 
$settings = $row['settings']; 
echo json_encode($row); 
} 
?> 
+2

Der JS-Code ist nicht nützlich. Ihr Server erzeugt einen schlechten JSON, daher müssen Sie den serverseitigen Code anzeigen. –

+0

while ($ row = mysqli_fetch_assoc ($ ergebnis)) {$ res [] = &row;} echo json_encode ($ res); –

Antwort

0

Ihr PHP-Code einen Begriff zum Zeitpunkt ausgibt, so dass es Antwort auf folgende Art und Weise geben.

{name:"abc",age:21}{name:"pqr",age:12} 

, die keine gültige Json ist, wenn Sie mehrere JSON-Objekte sind vorbei, dann haben Sie Sammlung davon erstellen. (Das ist einfach ein Array von Objekten) Der gültige Json für oben json

sein
[{name:"abc",age:21}{name:"pqr",age:12}] 

Sie können dies produzieren, indem man zuerst alle Datenbank-Zeilen in einem Array zu kontrollieren und dann dieses Array übergeben zu json_encode

while($row=mysqli_fetch($result) 
    $rows[] = $row; 
echo json_encode($rows); 

Alle oben genannten Dinge sind auf der Serverseite zu tun.

Jetzt schauen wir uns die Client-Seite an. Ihr JavaScript-Code sieht gut aus, außer für die Funktion success, da sie nur für die Verarbeitung eines einzigen Objekts geschrieben wurde. Server Antwort gibt die Daten als Array von json so ersten Objekte, die Sie das Array zu durchlaufen haben und dann einen Code für einzelnes Objekt so etwas wie dieses

success:function(data) { 
    for(var i in data) { 
     var Row = data[i] // it will contain your single object 
     //console.log function is used for debugging purpose only you can find more about it by googling. 
     console.log(Row.name) // you can access it's member like this 
     // do other stuff such as dom manipulation. 
    } 
} 

HINWEIS schreiben: Sie auch jQuerys .each $ verwenden können, um durchqueren eine Anordnung.

+0

danke siddhesh, und danke Manchary Manchaary auch. – Dave

Verwandte Themen