在codeigniter中使用ajax进行页面导航

时间:2013-03-04 04:10:28

标签: ajax codeigniter jquery

IN codeigniter我反复使用控制器加载我页面的所有模板.... 我已将页面分为标题,顶部导航,左侧导航以及内容和页脚。

这就是我现在所做的事情

public function get_started() {
    if (test_login()) {
        $this->load->view('includes/header');
        $this->load->view('includes/topnav');
        $this->load->view('includes/leftbar');
        $this->load->view('login_nav/get_started');
        $this->load->view('includes/footer');
    } else {
        $this->load->view('errors/needlogin');      
    }
}

在codeigniter中是否有任何jquery-ajax助手或插件可以让我保持页眉页脚和topnavigation静态,并允许我使用ajax加载特定视图。

提前感谢..

2 个答案:

答案 0 :(得分:0)

您可以使用构造函数设置静态标头:

//in your controller

public $data;

function __construct()
{
    $this->data['header'] = 'static_header';
    $this->data['static_footer'] = 'static_footer';
}

function get_started(){
    if (test_login()) {
        $this->data['subview'] = 'login_nav/get_started';
    } else {
        $this->data['subview'] = 'errors/needlogin';
    }
        $this->load->view('template',$this->data);
}

function get_page(){
   $view = $this->load->view('your_dynamic_view','',TRUE);
   print json_encode(array('success' => TRUE, 'view' => $view);
}

// in your template.php
<div id="header"><?php echo $this->load->view('header');?></div>
<div id="subview"><?php echo $this->load->view('subview');?></div>
<div id="footer"><?php echo $this->load->view('footer');?></div>

// in your script - used to load dynamic view on you subview div
<script type="text/javascript">
    $.get('controller/get_page',{},function(data){
        if(data.success){
            $('#subview').html(data.view);
        }
    },'json')
</script>

如果我的代码出现问题,请给我留言 快乐编码---&gt; :D

答案 1 :(得分:0)

PinoyPal的回答在理论上是正确的,但在实践中它并不适合我,因为它缺少一个主要细节:路线。

此脚本

// in your script - used to load dynamic view on you subview div
<script type="text/javascript">
    $.get('controller/get_page',{},function(data){
        if(data.success){
            $('#subview').html(data.view);
        }
    },'json')
</script>

永远不应该工作。代替误导性的'controller / get_page'事物,应该有一个实际GET请求的URL。让我们再试一次,看看它如何在现实生活中发挥作用:

$("a.your_navigation_element_class").on('click',function(e){
    e.preventDefault(); //this is to prevent browser from actually following the link
    var url = $(this).attr("href");
    $.get(url, {}, function(data){
        if (data.success){
            $('#subview').html(data.view);
        }
    },'json')
});

现在这里有一个问题:这个GET请求将在何处结束?在默认控制器路由中,这是正确的。这就是您需要修改请求URL并设置路由的原因,以便将此请求传递给ajax服务控制器。或者只是将ajax-serve函数添加到默认控制器并将ajax请求重新路由到它。

以下是它看起来如何包裹起来

在...... \ application \ controller \ Pages.php中:

class Pages extends CI_Controller {
    ...
    public function serve_ajax ($page) {
        $view = $this->load->view($page, '', TRUE);
        print json_encode( array('success' => TRUE, 'view' => $view);
    }
    ...
}

在...... \ application \ config \ routes.php中:

...
$route['ajax/(:any)'] = 'pages/serve_ajax/$1';

在您的页面上:

...
<body>
    ...
    <div id="page"></div>
    ...
    <script>
        $("a.navigation").on('click',function(e){
            e.preventDefault();
            var url = $(this).attr("href");
            $.get("/ajax" + url, {}, function(data){
            //The trailing slash before "ajax" places it directly above
            //the site root, like this: http://yourdomain.com/ajax/url
                if (data.success){
                    $('#page').html(data.view);
                }
            },'json')
        });
    </script>
</body>

你们都已经准备好了。