【问题标题】:handling multiple db rows with ajax and json使用 ajax 和 json 处理多个数据库行
【发布时间】:2016-09-08 16:51:53
【问题描述】:

我有一个 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);
} 
?>

【问题讨论】:

  • JS 代码没用。您的服务器正在生成错误的 json,因此您需要显示服务器端代码。
  • while($row = mysqli_fetch_assoc($result)){ $res[]=&row;} echo json_encode($res);

标签: php jquery mysql json ajax


【解决方案1】:

您的 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 代码看起来不错,除了成功函数,因为它是为处理一个对象而编写的。 服务器响应将数据作为 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 的 $.each 来遍历数组。

【讨论】:

  • 谢谢 siddhesh,也谢谢 Manchary Manchaary。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
  • 2016-03-14
  • 2020-11-15
  • 2019-07-12
相关资源
最近更新 更多