2016-09-08 35 views
0

我有一个MySQL数据库,我使用AJAX通过PHP进行查询多个数据库行,当只有一行返回它的错误了这个时候返回多行,它工作正常。处理与Ajax和JSON

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

JS代码是没有用的。您的服务器正在生成错误的JSON,因此您需要显示服务器端代码。 –

+0

而($行= mysqli_fetch_assoc($结果)){$ RES [] = &row;}回波json_encode($ RES); –

回答

0

您的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的$。每次穿越数组。

+0

谢谢siddhesh,并且谢谢Manchary Manchaary。 – Dave