0

我是 jQuery 和 Ajax 的新手,但我发现了一个使用 CodeIgniter 和数据表的示例组合。我确实尝试了与示例相同的方式,但我的数据表没有显示。

控制器

class User extends CI_Controller {
    private $content;
    private $data;
    function __construct(){
        parent::__construct();
        $this->load->model('usermodel');
        $this->init();
    }
    function init(){
        if( $this->session->userdata('username') == '' ) redirect('auth');
        $this->data['username'] = $this->session->userdata('username');
    }

    function index(){
        //$this->content = $this->load->view('userListView', null, true);
        $this->content = 'users';
        $this->data['content'] = $this->content;
        //$this->data['users'] = json_encode($this->usermodel->getDataTable());
        $this->load->view('home', $this->data);
    }

    function data() {
        //print_r($this->usermodel->getDataTable());
        echo json_encode($this->usermodel->getDataTable());
        exit;
    }

模型

class Usermodel extends CI_Model {
    function getListALL(){
        $strSQL = "SELECT * FROM mst_user";
        $qData = $this->db->query($strSQL);
        return $qData;
    }

    function getSingle($user_id){
        $strSQL = "SELECT * FROM mst_user WHERE id = '" . $user_id . "'";
        $qData = $this->db->query($strSQL);
        return $qData;
    }
    function getDataTable() {
        $sTable   = "mst_user";
        $aColumns = array( 'id', 'username', 'fullname', 'email');
        $sIndexColumn = "id";

        /*
         * Paging
         */
        $sLimit = "";
        if ( isset( $_POST['iDisplayStart'] ) && $_POST['iDisplayLength'] != '-1' ){
            $sLimit = "LIMIT ".addslashes( $_POST['iDisplayStart'] ).", " . addslashes( $_POST['iDisplayLength'] );

        }
        /*
           * Ordering
           */
        $sOrder = "";
        if ( isset( $_POST['iSortCol_0'] ) )
        {
            $sOrder = "ORDER BY  ";
            for ( $i=0 ; $i<intval( $_POST['iSortingCols'] ) ; $i++ )
            {
                if ( $_POST[ 'bSortable_'.intval($_POST['iSortCol_'.$i]) ] == "true" )
                {
                    $sOrder .= "`".$aColumns[ intval( $_POST['iSortCol_'.$i] ) ]."` ".
                        addslashes( $_POST['sSortDir_'.$i] ) .", ";
                }
            }

            $sOrder = substr_replace( $sOrder, "", -2 );
            if ( $sOrder == "ORDER BY" )
            {
                $sOrder = "";
            }
        }
        /*
           * Filtering
           * NOTE this does not match the built-in DataTables filtering which does it
           * word by word on any field. It's possible to do here, but concerned about efficiency
           * on very large tables, and MySQL's regex functionality is very limited
           */
        $sWhere = "";
        if ( isset($_POST['sSearch']) && $_POST['sSearch'] != "" )
        {
            $sWhere = "WHERE (";
            for ( $i=0 ; $i<count($aColumns) ; $i++ )
            {
                $sWhere .= "`".$aColumns[$i]."` LIKE '%".addslashes( $_POST['sSearch'] )."%' OR ";
            }
            $sWhere = substr_replace( $sWhere, "", -3 );
            $sWhere .= ')';
        }
        //echo $sWhere;exit;


        /* Individual column filtering */
        for ( $i=0 ; $i<count($aColumns) ; $i++ )
        {
            if ( isset($_POST['bSearchable_'.$i]) && $_POST['bSearchable_'.$i] == "true" && $_POST['sSearch_'.$i] != '' )
            {
                if ( $sWhere == "" )
                {
                    $sWhere = "WHERE ";
                }
                else
                {
                    $sWhere .= " AND ";
                }
                $sWhere .= "`".$aColumns[$i]."` LIKE '%".addslashes($_POST['sSearch_'.$i])."%' ";
            }
        }


        /*
           * SQL queries
           * Get data to display
           */
        $sQuery = "SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."` FROM $sTable $sWhere $sOrder $sLimit";
        //$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
        $stmt = $this->db->query($sQuery);
        //$stmt->setFetchMode(Zend_Db::FETCH_BOTH);
        $rResult = $stmt->result_array();
        //return $rResult;
        //echo $sQuery;exit;

        /* Data set length after filtering */
        $sQuery = " SELECT FOUND_ROWS() as FR";
        //$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
        $stmt = $this->db->query($sQuery);
        //$stmt->setFetchMode(Zend_Db::FETCH_BOTH);
        //$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
        $aResultFilterTotal = $stmt->result();
        //return $aResultFilterTotal;
        //$aResultFilterTotal = $stmt->fetchAll();
        $iFilteredTotal = $aResultFilterTotal[0]->FR;
        //echo $iFilteredTotal;exit;
        //print_r($aResultFilterTotal);exit;

        /* Total data set length */
        $sQuery = "SELECT COUNT(`".$sIndexColumn."`) as total FROM $sTable";
        //$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
        //echo $sQuery;exit;
        $stmt = $this->db->query($sQuery);
        //$stmt->setFetchMode(Zend_Db::FETCH_BOTH);
        //$aResultTotal = mysql_fetch_array($rResultTotal);
        $aResultTotal = $stmt->result();
        $iTotal = $aResultTotal[0]->total;
        //echo $iTotal;exit;


        /*
           * Output
           */
        /* if(isset($_POST['sEcho'])) $sEcho = intval($_POST['sEcho']);
     else $sEcho = '';*/
        $output = array(
            "sEcho" => intval($_POST['sEcho']),
            "iTotalRecords" => $iTotal,
            "iTotalDisplayRecords" => $iFilteredTotal,
            "aaData" => array()
        );

        foreach ($rResult as $aRow)
        {
            $row = array();
            for ( $i=0 ; $i<count($aColumns) ; $i++ )
            {
                if ( $aColumns[$i] == "version" )
                {
                    /* Special output formatting for 'version' column */
                    $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
                }
                else if ( $aColumns[$i] != ' ' )
                {
                    /* General output */
                    $row[] = $aRow[ $aColumns[$i] ];
                }
            }
            $output['aaData'][] = $row;
        }
        return $output;
    }

}

看法

<script type="text/javascript">
    $(document).ready(function() {
        $(".button").button();
        $('#table_list').dataTable({
            "bJQueryUI": true,
            "bServerSide": true,
            "sServerMethod": "POST",
            "sPaginationType": "full_numbers",
            "sAjaxSource": "<?php echo base_url();?>index.php/user/data"
        });
    });
</script>
<?php //echo $users;?>
<form class="form_element" action="">
    <div id="content_header"><h2>User - List</h2></div>
    <div style="float:right;padding-bottom:5px">
        <input type="button" value="Create New Record" onclick="window.location='user/form/add'" class="button">
    </div>
    <hr>

    <table id="table_list">
        <thead>
        <tr>
            <td>ID</td>
            <td width="200">User Name</td>
            <td>Full Name</td>
            <td>Email</td>
        </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
</form>

主页视图

<html>
<head>
<title>Admin MOS Template</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Copyright" content="">
<meta name="description" content="Admin MOS Template">
<meta name="keywords" content="Admin Page">
<meta name="author" content="">
<meta name="language" content="Bahasa Indonesia">

<link rel="shortcut icon" href="stylesheet/img/devil-icon.png"> <!--Pemanggilan gambar favicon-->
<link rel="stylesheet" type="text/css" href="<?php echo base_url();?>include/mos_admin/mos-css/mos-style.css"> <!--pemanggilan file css-->
<link type="text/css" href="<?php echo base_url(); ?>include/css/jquery.dataTables.css" rel="Stylesheet" />
<link type="text/css" href="<?php echo base_url(); ?>include/css/smoothness/jquery-ui-1.8.19.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="<?php echo base_url(); ?>include/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>include/js/jquery.dataTables.min.js"></script>
</head>

<body>
<?php
//print_r($users);
//echo $strFormType;
?>
<div id="header">
    <div class="inHeader">
        <div class="mosAdmin">
            <?php $this->load->view('headerview');?>
        </div>
        <div class="clear"></div>
    </div>
</div>

<div id="wrapper">
    <div id="leftBar">
        <?php $this->load->view('leftBarview'); ?>
    </div>

    <div id="rightContent">
        <?php
        if($content == 'changepass'){
            $this->load->view('changepassview');
        }
        else if($content == 'form'){
            $this->load->view('userformview');
        }
        else if($content == 'users'){
            $this->load->view('userlistview');
        }
        else{
            $this->load->view('rightContentview');
        }
        ?>
    </div>

    <div class="clear"></div>

    <div id="footer">
        <?php $this->load->view('footerview'); ?>
    </div>
</div>
</body>
</html>
4

1 回答 1

0

您是否偶然将 $this->data 中的“数据”对象与您拥有的数据方法(函数 data() 等)混淆了?同样对于使用 ajax ,您还需要使用 js 代码,例如使用 jquery:

$(document).ready(function() { 
   $('#element_trigger_ajax').click(function(){

            var my_url = 'YOUR URL';//www.example.com/user/data
            params = {elem_id:$('#some_param').val()};
                $.ajax({
                    async:false,
                    type:'POST',
                    url: my_url,
                    data:params,
                    success: function(resp){
                        # This will load the response from your data method in the user controller within the element container div
                        $('div#element_container_that_will_change').html(resp);
                    }
                });

     });  

}); 
于 2013-05-14T07:35:46.673 回答