【问题标题】:Ajax format data on CodeIgniter with datatablesCodeIgniter 上的 Ajax 格式数据与数据表
【发布时间】:2018-05-27 21:27:25
【问题描述】:

我想从数据库中获取信息,并将其显示在 CodeIngniter 3 上的 Datatables 和 JQuery 选项卡中。 在我看来我的桌子:

    <table id="myTable" class="display" style="width:100%">
        <thead>
            <tr>
                <th>Name</th>
                <th>Last_name</th>
            </tr>
        </thead>
    </table>

我的 js 脚本:

$(document).ready(function(){
$('#myTable').DataTable( {
        "processing": true,
        "serverSide": true,
        "order":[],
        "ajax": {
        "url": '<?= base_url('main/getData');?>',
        "type": "POST",
         "data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
        },
    });
})

我的控制器方法:

public function getData()
    {
     $this->security->get_csrf_token_name();
     $this->security->get_csrf_hash();
        $table = $this->main_model->data();
        if (count($table) > 0) 
        {
            foreach ($table as $row) 
            {
                $tab = array();
                $tab["name"] = $row->name;
                $tab["last_name"] = $row->last_name;
                $r_tab[] = $tab;                
            }
            echo json_encode($r_tab);
        }

非常感谢:)

【问题讨论】:

  • 是分开的 JS 文件还是视图 PHP 文件中的文件?顺便说一句,不要使用短标签。使用&lt;?php echo(在 PHP 网站上查找原因)。此行也应如下所示:"url": "&lt;?php echo base_url('main/getData');?&gt;",。您在此处遇到引号转义/值插值问题。
  • 你目前的方法有什么问题?

标签: php ajax codeigniter datatables


【解决方案1】:

您必须在数据表代码中添加columns 选项才能正确显示远程数据。

$(document).ready(function(){
$('#myTable').DataTable( {
        "processing": true,
        "serverSide": false,
        "order":[],
        "ajax": {
            "url": '<?php echo site_url('main/getData'); ?>',
            "type": "POST",
             "data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
        },
            'columns': [
      { "data": "name", "name": "name"},
      { "data": "last_name", "name": "last_name"},
    ]
    });
});

在您的控制器方法中,您的 JSON 响应的结构不正确。您需要将记录添加到输出数组的“数据”元素中。

更新控制器方法:

public function getData()
    {
     $data['csrf_token_name'] = $this->security->get_csrf_token_name(); // $data has to be passed as second parameter of $this->load->view(..., ....), 
     $data['csrf_token_hash'] = $this->security->get_csrf_hash();

        $table = $this->main_model->data();
        if (count($table) > 0) 
        {
            foreach ($table as $row) 
            {
                $tab = array();
                $tab["name"] = $row->name;
                $tab["last_name"] = $row->last_name;
                $r_tab[] = $tab;                
            }

            $output = array(
                "data" =>  $r_tab
            );

            echo json_encode($output);
        }

【讨论】:

  • 您也可以发布您的整个 getData(..) 代码吗?如果你愿意,你可以粘贴它。
【解决方案2】:

HTML

<table id="myTable" class="display" style="width:100%">
    <thead>
        <tr>
            <th>Name</th>
            <th>Last_name</th>
        </tr>
    </thead>
</table>

jQuery

 $('#user_table').DataTable( {

        "ajax": {
            "url": '<?php echo site_url('main/getData'); ?>',
            "type": "POST",
            "data": { '<?php echo $csrf_token_name; ?>' : '<?php echo $csrf_token_hash; ?>' }
        },
    } );

控制器

public function getData()
{
    $this->security->get_csrf_token_name();
    $this->security->get_csrf_hash();
    $this->datatables->select('*')
         ->from('table_name')

    echo $this->datatables->generate();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多