В моем приложении 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?