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>
这里应该有一个实际 GET 请求的 url代替“controller/get_page” 。这是它通常应该看起来的样子:
$("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 请求会在哪里结束?在默认的控制器路由中,没错。这就是为什么你需要 1) 修改你的请求 url 和 2) 设置一个路由,以便这个请求将被传递给一个 ajax 服务控制器。或者只是将一个 ajax 服务功能添加到您的默认控制器并将 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>
你都准备好了。