маршрутизация codeigniter без перезагрузки страницы - PullRequest
0 голосов
/ 15 января 2019

В моем приложении codeigniter есть боковое меню, которое генерируется динамически. Пункты меню также содержат ссылку для загрузки других страниц.

Я не использую маршрутизацию, предоставляемую codeigniter.

Вместо этого я использую ajax для загрузки данных страницы, чтобы избежать перезагрузки страницы.

Вот мой контроллер:

public function showData()
    {
        if(isset($_GET['noreload'])){
            if($_GET['noreload'] == 1) {
                $data['pageView'] = "test/testview";
                $this->load->view('master',$data); 
            }
        }else {
            $data['pageView'] = "test/testview";
            $this->load->view('test/testview',$data);
        }
    }

Упомянутое выше представление master содержит все ссылки js и css. Это структура представления master:

<body>
<?php $this->load->view('leftMenu');?>
<div id="dynamicdata">
<?php $this->load->view($pageView);?>
</div>
<?php $this->load->view('footer');?>
</body>

Это структура страницы leftMenu. Эта страница содержит функцию, которая загружает URL-адрес посредством вызова ajax и назначает HTML-код div с идентификатором dynamicdata на главной странице просмотра, упомянутой выше.

вызов ajax на левой странице меню: Этот AJAX получить URL-адрес из ссылок меню $ .Ajax ({ асинхронный: ложный, URL: URL, тип: "GET", данные: "", contentType: false, кеш: ложь, ProcessData ложь success: function (data) { window.history.pushState ('page2', 'Title', url); $ ( '# DynamicdatashowData') HTML ( ''); $ ( '# DynamicData') HTML (данные). } }); вернуть ложь;

файл просмотра test/testview также содержит функцию javascript, например:

window.onload = function() {
if(window.location.href != "<?=base_url()?>showData/") {
    if(window.location.href !="<?=base_url()?>showData?noreload=1") {
        window.history.pushState('page2', 'Title', "<?=base_url()?>showData/");
        var xhttp;
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        } else {
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
         xhttp.onreadystatechange = function() {
          if (xhttp.readyState == 4 && xhttp.status == 200) {
            document.write(xhttp.responseText);
            document.close();
            setTimeout(function(){
                window.history.pushState('page2', 'Title', "<?=base_url()?>showData");
            },5000)
          }
        };
        xhttp.open("GET", "<?=base_url()?>showData?noreload=1", true);
        xhttp.send();
    } else {
        setTimeout(function(){
                window.history.pushState('page2', 'Title', "<?=base_url()?>showData");
            },5000)
    }
}
};

Так что это моя текущая настройка для загрузки просмотра без обновления страницы. Если я вызываю showData напрямую без? Noreload = 1, то он загружает представление test / testView без бокового меню. Если url содержит? Noreload = 1, то страницы отлично загружаются вместе с левым меню.

Теперь я хочу удалить зависимость следующих скриптов, упомянутых выше:

1029 * то есть *

window.onload = function() {
    if(window.location.href != "<?=base_url()?>showData/") {
        if(window.location.href !="<?=base_url()?>showData?noreload=1") {
            window.history.pushState('page2', 'Title', "<?=base_url()?>showData/");
            var xhttp;
            if (window.XMLHttpRequest) {
                xhttp = new XMLHttpRequest();
            } else {
                xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
             xhttp.onreadystatechange = function() {
              if (xhttp.readyState == 4 && xhttp.status == 200) {
                document.write(xhttp.responseText);
                document.close();
                setTimeout(function(){
                    window.history.pushState('page2', 'Title', "<?=base_url()?>showData");
                },5000)
              }
            };
            xhttp.open("GET", "<?=base_url()?>showData?noreload=1", true);
            xhttp.send();
        } else {
            setTimeout(function(){
                    window.history.pushState('page2', 'Title', "<?=base_url()?>showData");
                },5000)
        }
    }
    };

и

if(isset($_GET['noreload'])){
                if($_GET['noreload'] == 1) {
}
}

Я хочу загрузить представление через мастер без обновления страницы. Есть ли лучшее решение для загрузки просмотров без обновления страницы в codeigniter?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...