javascript - CodeIgniter ajax重新加载页面问题

标签 javascript php jquery ajax codeigniter

我有一个带有ajax分页的页面,我目前可以检查 session 是否存在并进行相应的处理。但是,如果 session 已过期,我似乎无法删除菜单或正确重新加载页面。仅保留菜单,登录页面显示在表格所在的小区域中。

Controller 代码

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代码放置在 View 中

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

最佳答案

我假设$('#list').html(html);代码在dom中加载html。您可以发送包含 html 以及登录状态的 json,而不是直接从 php 发送 html。像这样。

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

Controller 方法:

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

        }

关于javascript - CodeIgniter ajax重新加载页面问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44712601/

相关文章:

javascript - 无意中关闭了生成 JavaScript 的 PHP 函数中的 &lt;/script&gt; 标签(本身通过 JavaScript 调用)

php - zend 左连接计数不起作用

php - PDO 插入成功但没有?

javascript - 如何使用 history js 在浏览器中启用/禁用 "click to go forward"按钮?

javascript - 通过 jquery-ajax 在表单内使用两个不同的提交按钮提交表单

javascript - JSON.parse 嵌套JSON字符串属性解析

javascript - 基于 Ajax 的多个自动完成/自动建议插件

JQuery/Bootstrap : close and open the same modal to refresh the content, 是动态生成的

javascript - 无论如何,可以将 $.inArray (或替代方案)与 JavaScript 对象数组一起使用吗?

javascript - 从 HTML 模板制作 WordPress 主题时,JS 不起作用