2013-05-14 4 views
0

Я новичок с jQuery и Ajax, но я нашел примерную комбинацию с использованием CodeIgniter и datatables. Я попробовал это так же, как пример, но мои данные не показывались.Datatables не показывают

Контроллер

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> 
+0

Не включайте index.php при вызове: index.php/данные пользователя. Используйте только:

+0

какая ошибка вы получаете? – Ayoub

+0

Что именно не хватает Донни? – goseo

ответ

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); 
        } 
       }); 

    }); 

}); 
+0

Также, если ($ this-> session-> userdata ('username') == '') перенаправление ('auth'); должно быть, если (! $ this-> session-> userdata ('username')) redirect ('auth'); – despina

+0

thx для продвижения до despina, моя проблема исправить уже, я просто не хватает layout.js и jquery.ui тоже включают: D – Niinii

Смежные вопросы