在我的codeigniter应用程序中,我有一个动态生成的补充工具栏菜单。菜单项还包含用于加载其他页面的href。
我没有使用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
页的结构。该页面包含一个函数,该函数通过ajax调用加载url,并将html分配给上述主视图页面中ID为dynamicdata
的div。
leftMenu页面中的ajax调用: 这个ajax从菜单链接中获取URL $ .ajax({ 异步:错误, 网址:网址, 类型:“ GET”, 数据:“”, contentType:false, 快取:false, processData:false 成功:功能(数据){ window.history.pushState('page2','Title',url); $('#dynamicdatashowData')。html(''); $('#dynamicdata')。html(data); } }); 返回false;
视图文件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,则页面将与左侧菜单一起完美加载。
现在,我想删除上面提到的以下脚本的依赖项:
即
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中的页面?