AJAX POST的数据表不起作用(使用加载的ajax)

问题描述 投票:0回答:1

我正在尝试执行此示例https://datatables.net/blog/2017-03-31,除了ajax请求之外,其他所有功能都可以正常工作,问题是我正在尝试从数据库返回数据,而几乎不知道如何使用ajax(新手)来做到这一点。我的代码和ajax请求看起来:

var id = 0;
$('#tablanormal tbody').on('click', 'td.details-control', function () {
            var tr = $(this).closest('tr');
            var tdi = tr.find("i.fa");
            var row = table.row(tr);
            id = 0;
            id = parseInt(table.row(this).data().id_sol);

            if (row.child.isShown()) {
                // This row is already open - close it
                row.child.hide();
                tr.removeClass('shown');
                tdi.first().removeClass('fa-minus-square');
                tdi.first().addClass('fa-plus-square');
            } else {
                // Open this row
                row.child(format(row.data())).show();
                tr.addClass('shown');
                tdi.first().removeClass('fa-plus-square');
                tdi.first().addClass('fa-minus-square');
            }
        });

        table.on("user-select", function (e, dt, type, cell, originalEvent) {
            if ($(cell.node()).hasClass("details-control")) {
                e.preventDefault();
            }
        });
    });

    function format(rowData) {
        var div = $('<div/>')
                .addClass('loading')
                .text('Loading...');

        $.ajax({
            method: 'POST',
            url: 'datatables_ajax/items.php',
            data: {idsol: id},
            dataType: 'json',
            success: function (json) {
                div
                        .html(json.html)
                        .removeClass('loading');
            },
            error: function (er) {
                console.error(error)
            }
        });

        return div;
    }

item.php文件

<?php

include_once '../datatables_ajax/conexion.php';
$objeto = new Conexion();
$conexion = $objeto->Conectar();

$idsol = $_POST['idsol'];   
$consulta = "CALL Items('".$idsol."')";
$resultado = $conexion->prepare($consulta);
$resultado->execute();
$data=$resultado->fetchAll(PDO::FETCH_ASSOC);

//print json_encode($data, JSON_UNESCAPED_UNICODE);
echo '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;"><tbody>'; 
foreach(['ID','item','number'] as $attribute) {
    echo '<tr><th>'.$attribute.'</th>';
    foreach($data as $row) {
        echo '<td>'.$row[$attribute].'</td>';
    }
    echo '</tr>';
}
echo '</tbody></table>';
$conexion=null;
?>

items.php返回id_sol,item_name,item_number,我想先以文本形式返回它(如果您仅打开文件,则可以使用),但是当试图显示该表时,它只是停留在“正在加载...”中,因此如果有人帮助我将这些数据作为表格返回,将很有帮助。

php jquery ajax post datatables
1个回答
1
投票

第一

[ajax调用完成后,在complete: function(){}内而不是success: function(){}内,应删除加载文本。

第二

您可以像这样从PHP将数据作为表返回:

if ($resultado->rowCount()){ //meaning if the request returned some data
    $data=$resultado->fetchAll(PDO::FETCH_ASSOC);
  $d = [];
  $i = ;
  foreach($data as $val){
    $d[i]['fieldName'] = $val['columnName'];
  }
  echo json_encode($data);
}else{ //no data returned
//error handling here
}

第三

如果要以HTML表形式返回数据,请执行以下操作:

if ($resultado->rowCount()){ //meaning if the request returned some data
 $data=$resultado->fetchAll(PDO::FETCH_ASSOC);
 $output = "
 <table>
  <thead>
    <tr>
      <th>first header </th>
      <th>second header </th>
    </tr>
  </thead>
  <body>
 ";
     $d = [];
     $i = ;
     foreach($data as $val){
      $output .=" 
       <tr>
       <td>first header data=".$val[columnName]."</td>
       <td>second header data=".$val[columnName]."</td>
       </tr>";

        $d[i]['fieldName'] = $val['columnName'];
      }
      $output .="  </tbody>
      </table>";
      echo json_encode($output);
    }else{ //no data returned
    //error handling here
    }
© www.soinside.com 2019 - 2024. All rights reserved.