【问题标题】:Codeigniter- controller views using ajax and withoutCodeigniter- 使用 ajax 和不使用 ajax 的控制器视图
【发布时间】:2014-11-17 07:05:47
【问题描述】:

我有一个默认控制器:

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. 如何在直接 URL 导航或页面刷新时加载 master.php 和 categories.php 视图

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

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

        }
    });     
};

谢谢!

【问题讨论】:

    标签: php jquery ajax codeigniter controller


    【解决方案1】:

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

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

    为了检查 CodeIgniter 中的 Ajax 请求,codeIgniter 输出类方法类 is_ajax_request() ,此函数检查是否已设置 HTTP_X_REQUESTED_WITH 服务器标头,如果设置响应将为真,否则为假意味着它将返回布尔响应。

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

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

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

    【讨论】:

      【解决方案2】:

      你需要添加

      <?php echo site_url()?> 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多