2017-06-23 30 views
0

我有一個頁面上有ajax分頁,我目前能夠檢查會話是否存在並相應地處理。但是,如果會話過期,我似乎無法刪除菜單或正確地重新加載頁面。只剩下菜單並且登錄頁面顯示在表格所在的小區域。我希望有人能幫幫忙。CodeIgniter阿賈克斯重新加載頁面問題

控制器代碼

public function index() 
    { 
     $conditions = array(); 
     $data = array(); 
     $totalRec = count($this->DocumentModel->admin_get_and_search($conditions)); 
     $config['target']  = '#list'; 
     $config['base_url'] = site_url('/AdminDocuments/Search'); 
     $config['total_rows'] = $totalRec; 
     $config['per_page'] = $this->get_per_page(); 
     $this->ajax_pagination->initialize($config); 
     $data['links'] = $this->ajax_pagination->create_links(); 
     $data['datatable'] = $this->DocumentModel->admin_get_and_search(array('limit'=>$this->get_per_page())); 
     $data['user'] = $this->AccountModel->get_person($this->get_person_id()); 
     $data['current_page'] = $this->ajax_pagination->getCurrPage(); 
     $this->load->view('layout/admins/common/header'); 
     $this->load->view('layout/admins/common/navigation'); 
     $this->load->view('layout/admins/common/title'); 
     $this->load->view('layout/admins/common/errors'); 
     $this->load->view('layout/admins/common/search'); 
     $this->load->view('admins/documents/index',$data); 
     $this->load->view('layout/admins/common/footer'); 
    } 

    public function search(){ 
     if($this->input->is_ajax_request()){ 
      if(!$this->logged_in()){ 
       $this->index(); 
      }else{ 
       $conditions = array(); 
       $page = $this->input->post('page'); 
       if(!$page){ 
        $offset = 0; 
       }else{ 
        $offset = $page; 
       } 
       $keywords = $this->input->post('keywords'); 
       if(!empty($keywords)){ 
        $conditions['search']['keywords'] = $keywords; 
       } 
       $totalRec = count($this->DocumentModel->admin_get_and_search($conditions)); 
       $config['target']  = '#list'; 
       $config['base_url'] = site_url('/AdminDocuments/Search'); 
       $config['total_rows'] = $totalRec; 
       $config['per_page'] = $this->get_per_page(); 
       $this->ajax_pagination->initialize($config); 
       $conditions['start'] = $offset; 
       $conditions['limit'] = $this->get_per_page(); 
       $data['links'] = $this->ajax_pagination->create_links(); 
       $data['datatable'] = $this->DocumentModel->admin_get_and_search($conditions); 
       $data['current_page'] = $this->ajax_pagination->getCurrPage(); 
       $this->load->view('admins/documents/ajax_pagination', $data, false); 
      } 
     } 
    } 

我的JS代碼放在我假設$('#list').html(html);代碼視圖

<script> 

function searchFilter(page_num) { 
    page_num = page_num?page_num:0; 
    var keywords = $('#search').val(); 
    $.ajax({ 
     type: 'POST', 
     url: 'url/AdminDocuments/Search/'+page_num, 
     data:'page='+page_num+'&keywords='+keywords, 
     beforeSend: function() { 
      $('.loading').show(); 
     }, 
     success: function (html) { 
      $('#list').html(html); 
      $('.loading').fadeOut("slow"); 
     } 
    }); 
} 

function changeStatus(input){ 
    var id = input; 
    $.ajax({ 
     type:'POST', 
     url:'url/AdminDocuments/ChangeStatus/', 
     data:'id='+id, 
     beforeSend: function() { 
      $('.loading').show(); 
     }, 
     success:function(result){ 
      console.log(result); 
      searchFilter(0); 
      $('.loading').fadeOut("slow"); 
     } 
    }); 
} 

function deleteDocument(input){ 
    var id = input; 
    $.ajax({ 
     type:'POST', 
     url:'url/AdminDocuments/Delete/', 
     data:'id='+id, 
     beforeSend: function() { 
      $('.loading').show(); 
     }, 
     success:function(result){ 
      searchFilter(0); 
      $('.loading').fadeOut("slow"); 
     } 
    }); 
} 
</script> 
+0

你可以發表你的js代碼呢? –

+0

嘿,好的。我的分頁代碼是從ajax分頁庫加載的,那裏也有javascript。 – JianYA

回答

1

加載DOM中的HTML。而不是直接從PHP發送HTML,你可以發送一個包含html的json以及登錄狀態。喜歡這個。

$data = [ 
    'login_status' => 1 // or 0, 
    'html' => $html // full html your are sending now 
]; 

echo json_encode($data); 

然後在ajax成功。

function searchFilter(page_num) { 
    page_num = page_num?page_num:0; 
    var keywords = $('#search').val(); 
    $.ajax({ 
     type: 'POST', 
     url: 'url/AdminDocuments/Search/'+page_num, 
     data:'page='+page_num+'&keywords='+keywords, 
     beforeSend: function() { 
      $('.loading').show(); 
     }, 
     success: function (response) { 
      var data = $.parseJSON(response); 

     if(data.login_status == 0) 
     { 
      window.location.href = 'redirect to login page'; 
     } 

     if(data.login_status == 1) 
     { 
      $('#list').html(data.html); 
     } 
      $('.loading').fadeOut("slow"); 
     } 
    }); 
} 

控制器的方法:

public function search(){ 
     if($this->input->is_ajax_request()){ 

       $conditions = array(); 
       $page = $this->input->post('page'); 
       if(!$page){ 
        $offset = 0; 
       }else{ 
        $offset = $page; 
       } 
       $keywords = $this->input->post('keywords'); 
       if(!empty($keywords)){ 
        $conditions['search']['keywords'] = $keywords; 
       } 
       $totalRec = count($this->DocumentModel->admin_get_and_search($conditions)); 
       $config['target']  = '#list'; 
       $config['base_url'] = site_url('/AdminDocuments/Search'); 
       $config['total_rows'] = $totalRec; 
       $config['per_page'] = $this->get_per_page(); 
       $this->ajax_pagination->initialize($config); 
       $conditions['start'] = $offset; 
       $conditions['limit'] = $this->get_per_page(); 
       $data['links'] = $this->ajax_pagination->create_links(); 
       $data['datatable'] = $this->DocumentModel->admin_get_and_search($conditions); 
       $data['current_page'] = $this->ajax_pagination->getCurrPage(); 
       $html = $this->load->view('admins/documents/ajax_pagination', $data, true); 
    $res['html'] = $html; 
    $res['login_status'] = ($this->logged_in()) ? '1' : '0'; 

     echo json_encode($res); 

     } 
+0

$('#list')。html(html);在dom中加載html。我試過重定向('/ Login'),但問題是它只重載列表容器。 window.location會重新加載整個屏幕? – JianYA

+0

它會重新加載整個屏幕 –

+0

'重定向('/登錄')'在PHP中,它只會發送登錄整個登錄頁面響應ajax,但如果你做了它後,ajax響應即成功'window.location '它會重新加載整個頁面。 –