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


Codeigniter- controller views using ajax and without

我有一个默认控制器:

类 主页扩展 CI_Controller {

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

}

单击时,使用 AJAX 我能够加载视图类别.php并将 URL 更新为 www.mywebsite.com/categories,而无需刷新页面。

但是现在,如果用户直接使用链接或刷新页面到达此处,他最终只会加载类别.php视图,而不是主.php视图

  1. 如何在直接 URL 导航或页面刷新时加载主.php和类别.php视图

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

我的 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);
        }
    });     
};

谢谢!

CodeIgniter 输入类提供了一些辅助函数来处理用户输入,这个类是由系统自动初始化的,所以不需要手动初始化。

我总是建议在处理表单和请求时使用 PHP Core 输入变量来代替此类。

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

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

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

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

你需要添加

<?php echo site_url()?> 

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