无需重新加载页面的代码点火器路由

时间:2019-01-15 05:59:00

标签: javascript php html ajax codeigniter

在我的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中的页面?

0 个答案:

没有答案