使用ajax和json处理多个db行


handling multiple db rows with ajax and json

我有一个mysql数据库,我使用ajax通过php查询它,当只返回单行时,它会很好地工作,当多行返回时,它会出错。

"xhr=[object Object]
 textStatus=parsererror 
 errorThrown= SyntaxError: Unexpected token { in JSON at position 221"

这是我正在使用的代码,任何帮助将非常感激。

  $('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代码

    <?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);
} 
?>

您的PHP代码每次输出一个术语,因此它将以以下方式给出响应。

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

这不是一个有效的json如果你传递多个json对象,那么你必须创建它的集合。(这只是一个对象数组)以上json的有效json将是

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

您可以先将所有数据库行捕获到一个数组中,然后将该数组传递给json_encode

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

以上所有工作都是在服务器端完成的。

现在让我们看看客户端。您的Javascript代码看起来很好,除了success函数,因为它是为处理一个对象而编写的。服务器响应以json对象数组的形式返回数据首先你需要迭代数组然后为单个对象写代码像这样

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.
    }
}

注意:你也可以使用JQuery的$。