我有一个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);
}
?>
答案 0 :(得分:0)
您的PHP代码正在输出一个术语,因此它将以下列方式给出响应。
{name:"abc",age:21}{name:"pqr",age:12}
这不是有效的json 如果你传递多个JSON对象,那么你必须创建它的集合。(这只是一个对象数组)上面json的有效json将是< / p>
[{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来遍历数组。