首页 > 解决方案 > 使用 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('&#8377;' + 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,'.',',')));
      }
    }
  }
}

?>

我搜索但找不到我犯了什么错误。请帮忙。此外,如果有人想就任何代码改进提出任何建议(如果需要),我们将不胜感激。

标签: phpjqueryhtml

解决方案


啊! 我得到了解决方案。我在这里犯了一个愚蠢的错误。如果有人访问此问题,则发布答案以帮助将来的人。

在 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>";

推荐阅读