php - 使用 JSON 返回表数据不起作用
问题描述
我正在尝试使用 JSON 返回表数据并更新当前表,以便在插入数据时我可以看到实时更新,而无需每次都刷新页面以加快工作速度。我尝试了以下但它没有返回新表。
HTML
<div class="table-responsive">
<table class="table table-striped" id="pinReqHist">
<tr>
<th>ID</th>
<th>Amount</th>
<th>Request Date</th>
<th>Status</th>
</tr>
<?php
while($pin = $pinReq->fetch()){ extract($pin);
if($pr_status == 'approved'){
$statusColor = "text-success";
}else if($pr_status == 'denied'){
$statusColor = "text-danger";
}else{
$statusColor = "text-warning";
}
?>
<tr>
<td><?php echo $pr_id; ?></td>
<td><?php echo $pr_amount; ?></td>
<td><?php echo date('jS F, Y (h:i a)', strtotime($pr_date)); ?></td>
<td><span class="<?php echo $statusColor; ?>"><?php echo $pr_status; ?></span></td>
</tr>
<?php } ?>
</table>
</div>
jQuery
$("#requestPin").click(function() {
var form = document.requestPin;
var dataString = $(form).serialize();
$.ajax({
type: "POST",
dataType : "json",
url: "processes/request-pin.php",
data: dataString,
cache: true,
beforeSend: function(){
$("#requestPin").html("Please wait...");
$('.message').hide();
},
success: function(json){
$('.message').html(json.status).fadeIn();
$("#requestPin").html("Request");
if($('.message').find('#responseBox').hasClass('alert-success')){
$('#wallet').html('₹' + json.bal);
$('#pinReqHist').html(json.table);
}
}
});
return false;
});
请求-pin.php
<?php
session_start();
include('../config/db.php');
$msg = null;
$userid = (!empty($_SESSION['loggedin']))?$_SESSION['loggedin']:null;
$amount = (!empty($_POST['amount']))?$_POST['amount']:null;
if($_POST){
$balance = $pdo->prepare("SELECT wal_balance FROM wallet WHERE wal_user = :user");
$balance-> bindValue(':user', $userid);
$balance-> execute();
$bal = $balance->fetch();
if($amount == ''){
$msg = "<div class='alert alert-danger' id='responseBox'>Amount is required.</div>";
echo json_encode(array('status' => $msg, 'bal' => number_format($bal['wal_balance'],2,'.',',')));
}else if(!ctype_digit($amount)){
$msg = "<div class='alert alert-danger' id='responseBox'>Please enter only numbers.</div>";
echo json_encode(array('status' => $msg, 'bal' => number_format($bal['wal_balance'],2,'.',',')));
}else{
if($bal['wal_balance'] < $amount){
$msg = "<div class='alert alert-danger' id='responseBox'>Insufficient balance.</div>";
echo json_encode(array('status' => $msg, 'bal' => number_format($bal['wal_balance'],2,'.',',')));
}else{
$insert = $pdo->prepare("INSERT INTO pin_request(pr_user, pr_amount)VALUES(:user, :amt)");
$insert-> bindValue(':user', $userid);
$insert-> bindValue(':amt', $amount);
$insert-> execute();
if($insert){
$update = $pdo->prepare("UPDATE wallet SET wal_balance = wal_balance-".$amount." WHERE wal_user = :user");
$update-> bindValue(':user', $userid);
$update-> execute();
$wallet = $pdo->prepare("SELECT wal_balance FROM wallet WHERE wal_user = :user");
$wallet-> bindValue(':user', $userid);
$wallet-> execute();
$wal = $wallet->fetch();
$pinReq = $pdo->prepare("SELECT * FROM pin_request WHERE pr_user = :user");
$pinReq-> bindValue(':user', $userid);
$pinReq-> execute();
$table = "<table class='table table-striped' id='pinReqHist'>
<tr>
<th>ID</th>
<th>Amount</th>
<th>Request Date</th>
<th>Status</th>
</tr>";
while($pin = $pinReq->fetch()){ extract($pin);
if($pr_status == 'approved'){
$statusColor = "text-success";
}else if($pr_status == 'denied'){
$statusColor = "text-danger";
}else{
$statusColor = "text-warning";
}
$table .= "<tr>
<td>".echo $pr_id."</td>
<td>".echo $pr_amount."</td>
<td>".echo date("jS F, Y (h:i a)", strtotime($pr_date))."</td>
<td><span class='".$statusColor."'>".echo $pr_status."</span></td>
</tr>";
}
$table .= "</table>";
$msg = "<div class='alert alert-success' id='responseBox'>Pin request sent!</div>";
echo json_encode(array('status' => $msg, 'bal' => number_format($wal['wal_balance'],2,'.',','),
'table' => $table));
}else{
$msg = "<div class='alert alert-danger' id='responseBox'>Server Error! Please try again.</div>";
echo json_encode(array('status' => $msg, 'bal' => number_format($bal['wal_balance'],2,'.',',')));
}
}
}
}
?>
我搜索但找不到我犯了什么错误。请帮忙。此外,如果有人想就任何代码改进提出任何建议(如果需要),我们将不胜感激。
解决方案
啊! 我得到了解决方案。我在这里犯了一个愚蠢的错误。如果有人访问此问题,则发布答案以帮助将来的人。
在 while 循环内的 request-pin.php 页面中,我放置了 echo 这实际上是一个错误。由于这里的所有内容都已经在 PHP 变量$table
中,因此我不需要将 echo 放在这里。这里所做的更改是:
替换了这个
$table .= "<tr>
<td>".echo $pr_id."</td>
<td>".echo $pr_amount."</td>
<td>".echo date("jS F, Y (h:i a)", strtotime($pr_date))."</td>
<td><span class='".$statusColor."'>".echo $pr_status."</span></td>
</tr>";
有了这个
$table .= "<tr>
<td>".$pr_id."</td>
<td>".$pr_amount."</td>
<td>".date("jS F, Y (h:i a)", strtotime($pr_date))."</td>
<td><span class='".$statusColor."'>".$pr_status."</span></td>
</tr>";
推荐阅读
- java - 为什么 this.static_variable 在 this 引用实例变量而不是 java 中的 Class 时没有给出错误
- google-apps-script - 符合条件时发送电子邮件的 GOOGLE 脚本
- machine-learning - Python 中是否有任何用于变色龙聚类算法的库?
- scala - 如何阻止函数返回,直到函数中的所有期货都在scala中执行?
- sharepoint - 如何在 PowerApps 上显示 subFloder 的项目?
- python - 如何从 id = 1 计算并将第一列命名为“Id”
- javascript - 用 d3.js 加载巨大的 Json 89000++ 行,这导致我加载速度非常慢,几乎杀死了 chrome
- javascript - CRM 自定义活动不返回输出参数
- reactjs - 虚拟 dom 在内存中是什么意思?
- java - 通知适配器、Activity/Fragment 或 POJO 以接收来自 API(改造)的实时消息?