2017-08-18 97 views
1

我使用PHP从MySQL数据库检索一些记录,我想将这些发送到我的AJAX并通过它们循环,以便将prepend行记录到现有表中。AJAX响应和PHP循环

但是我只能看到从我的查询返回的最后(最近)记录。有人能指出我要去哪里吗?

AJAX

$.ajax({ 
    type: "POST", 
    url: 'feed.php', 
    data: {lastSerial: true}, 
    dataType: 'json', 
    success: function(data){ 
     console.log(data); // logs `{Direction: "O", CardNo: "02730984", SerialNo: 20559303}` 
     $.each(data, function(key, value) { 
      // here I want to loop through the returned results - for example 
      $("#transactionTable").prepend('<tr><td>'+ SerialNo +'</td><td>'+ CardNo +'</td><td>'+ Direction +'</td></tr>'); 
     }); 
     } 
    }); 

feed.php

if(isset($_POST['lastSerial']) && $_POST['lastSerial'] == true) { 
    $query = "SELECT TimeStamp, Direction, CardNo, SerialNo FROM Transactions"; 
    // this query returns approx. 20 results 
    $stmt = $conn->prepare($query); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    while($row = $result->fetch_assoc()) { 
     $data["Direction"] = $row['Direction']; 
     $data["CardNo"] = $row['CardNo']; 
     $data["SerialNo"] = $row['SerialNo']; 
    } 
    echo json_encode($data); 
} 

而且在我的PHP,我应该使用whileif声明?

回答

1

您使用的是单$data对象,每次重新设定其内容。你想建立对象的数组:

$data = array(); 

while($row = $result->fetch_assoc()) { 
    $data[] = array( 
    "Direction" => $row['Direction'], 
    "CardNo" => $row['CardNo'], 
    "SerialNo" => $row['SerialNo'] 
); 
} 

echo json_encode($data); 

其次:

// ... 
success: function(data){ 
    $.each(data, function(key, value) { 
     // here I want to loop through the returned results - for example 
     $("#transactionTable").prepend('<tr><td>'+ value.SerialNo +'</td><td>'+ value.CardNo +'</td><td>'+ value.Direction +'</td></tr>'); 
    }); 
    } 
0

在您的feed.php中循环遍历结果,但在每个循环中都会覆盖数据。因此,您只是将数据库的最后结果返回给AJAX请求。

许多解决方案存在,但你既然您不改变的关键,这样做

$data["Direction"][] = $row['Direction']; 
$data["CardNo"][] = $row['CardNo']; 
$data["SerialNo"][] = $row['SerialNo']; 

or better: 
$data[] = $row; 

,您可以使用最后一个选项。使用jQuery你可以遍历它,并访问与value.Direction,value.CardNo数据,value.SerialNo

注:未测试