使用ajax和不使用ajax的Codeigniter-控制器视图

时间:2014-11-17 07:05:48

标签: php jquery ajax codeigniter controller

我有一个默认控制器:

class Home扩展了CI_Controller {

public function index() 
{   
    $data['content']='discover';
    $this->load->view('layouts/master', $data);             
}   

public function categories()
{
    $this->load->view('categories');
}

}

点击后,使用AJAX,我可以加载视图 categories.php ,并在不刷新页面的情况下将URL更新到www.mywebsite.com/categories。

但是现在,如果用户直接使用链接登陆或刷新页面,他最终只加载 categories.php 视图,而不是 master.php 视图

  1. 如何在直接网址导航或网页刷新时加载master.php和categories.php视图

  2. 使用AJAX时只需加载categories.php。

  3. 我的AJAX:

    $('#navbar a').click(function(e){
        e.preventDefault();
        href=$(this).attr('href');
        if (href.indexOf(document.domain) > -1 || href.indexOf(':') === -1){
            window.history.pushState('obj', '', href);
            navigat(href);          
        }       
    });
    
    function navigat(href){             
        $.ajax({
            type:'GET',
            url:href,
            cache:false,
            dataType: 'html',
            statusCode: {
                    404: function() {
                      $("#content").html('Could not contact server.');
                    },
                    500: function() {
                      $("#content").html('A server-side error has occurred.');
                    }
            },
            error: function() {
                $("#content").html('A problem has occurred.');
            },
            success: function(html) {
                $('#content').html(html);
    
            }
        });     
    };
    

    谢谢!

2 个答案:

答案 0 :(得分:0)

您需要添加

<?php echo site_url()?> 

在href中,希望这可以帮助您解决问题

答案 1 :(得分:0)

CodeIgniter输入类提供一些辅助函数来处理用户输入,该类由系统自动初始化,因此无需手动执行。

我总是建议在处理表单和请求时使用此类而不是使用PHP核心输入变量。

要检查CodeIgniter中的Ajax请求,codeIgniter输出类方法类is_ajax_request(),此函数检查是否已设置HTTP_X_REQUESTED_WITH服务器标头,如果set response为true,否则为false表示它将返回布尔响应。 / p>

在您的控制器中,您可以使用以下代码

if (!$this->input->is_ajax_request()) {
        echo "Not ajax request";
} else {
        echo "Ajax Request";
}

因此,在您的控制器操作中使用上述脚本,您可以识别用户是直接来自还是来自ajax调用。