【问题标题】:CodeIgniter ajax reloading page issueCodeIgniter ajax 重新加载页面问题
【发布时间】:2017-06-23 03:26:58
【问题描述】:

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

控制器代码

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

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

【问题讨论】:

  • 你能把你的js代码也贴出来吗?
  • 嘿,是的。我的分页代码是从 ajax 分页库加载的,那里也有 javascript。

标签: javascript php jquery ajax codeigniter


【解决方案1】:

我假设$('#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");
        }
    });
}

控制器方法:

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

        }

【讨论】:

  • $('#list').html(html);在dom中加载html。我试过 redirect('/Login') 但问题是它只重新加载列表容器。 window.location 会重新加载整个屏幕吗?
  • 是的,它会重新加载整个屏幕
  • redirect('/Login') 在 php 中,它只会发送登录整个登录页面以响应 ajax,但如果您在 ajax 响应之后执行此操作,即成功window.location,它将重新加载整个页面。
  • 您好,感谢您的帮助。我试过 window.location.href 但它仍然做同样的事情。它仅出于某种原因重新加载容器。
  • 你是在成功的ajax响应块中做的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多