2017-06-23 4 views
0

Ich habe eine Seite mit Ajax Paginierung, ich bin derzeit in der Lage zu prüfen, ob die Sitzung existiert und entsprechend zu verarbeiten. Ich kann jedoch nicht scheinen, das Menü zu entfernen oder die Seite neu zu laden, wenn die Sitzung abgelaufen ist. Nur das Menü bleibt und die Login-Seite zeigt in dem kleinen Bereich, wo der Tisch war. Ich hoffe, dass jemand helfen kann.CodeIgniter Ajax Neuladen der Seite Ausgabe

Controller-Code

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

Mein JS-Code, die

<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

können Sie Ihre js-Code als auch schreiben? –

+0

Hey Ja sicher. Mein Paginierungscode wird aus der ajax Paginierungsbibliothek geladen und dort gibt es auch Javascript. – JianYA

Antwort

1

in der Ansicht platziert i $('#list').html(html); Code gehe davon lädt die html in dem dom. Anstatt direkt den HTML-Code von PHP zu senden, können Sie einen JSON mit dem HTML-Code sowie den Login-Status senden. so was.

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

echo json_encode($data); 

dann im Ajax Erfolg.

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

Controller-Methode:

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); lädt die html in der dom. Ich habe versucht Redirect ('/ Login'), aber das Problem ist, dass es nur den Listencontainer neu lädt. Wird window.location den gesamten Bildschirm neu laden? – JianYA

+0

yup es wird den gesamten Bildschirm neu laden –

+0

'Redirect ('/ Login')' in PHP wird es nur die Login-Login-Seite als Antwort auf Ajax senden, aber wenn Sie es nach der Ajax-Antwort, dh in Erfolg tun 'window.location 'Es wird die gesamte Seite neu laden. –