这更像是“我是否正确思考”而不是问题。
我有一个控制器,以及一个加载标题视图,动态内容视图和页脚视图的函数。
在我的内容视图中,有一个链接点击利用jquery更改内容。它通过加载(使用.load())完全相同的控制器但传递var $ ajax ='yes'来实现这一点;
使用这个我的控制器知道不再加载页眉/页脚,而只是加载内容部分。
这很有效。
然后我偶然发现了jqueries加载片段的能力。我是否认为我的做事方式在资源使用方面更好是正确的,因为利用片段加载,我将加载整个页面,然后只显示片段..I.E无保存。
假设这是正确的,有没有办法实现我想要有效实现的目标,而不需要:
if(!$ajax){load header/footer}
在每个基于ajax的控制器功能的开头?
答案 0 :(得分:0)
我有一段时间没有使用过codeigniter,但是如果我没记错的话,它有一个名为IS_AJAX_REQUEST
的常量,所以你不需要将它与请求本身一起传递。
回答你的问题,如果你创建扩展CI控制器的基本控制器类(不知道确切的类名,对不起),并使所有其他控制器扩展它,这是可能的。
然后你可以编写自定义渲染函数来检查IS_AJAX_REQUEST
并仅渲染完整的布局或特定的视图。
但你必须弄清楚如何对待重定向和东西。或者也许不是渲染视图,而是想输出JSON。
回答你的另一个问题,是的,最好只加载html的一部分而不是渲染完整的文件并从中获取一部分。但是你可以计算你的页眉和页脚的大小。我认为不是那么多。所以我猜你应该主要是为了改善用户体验。
答案 1 :(得分:0)
Codeigniter以检查请求是否来自AJAX源的方式构建
$this->input->is_ajax_request();
所以你不需要传递$ajax
就知道它是ajax。
我认为在服务器端检查ajax比使用jquery的.load()
和选择器更有效,因为你仍然在请求中加载整个页眉/页脚,jquery只是很聪明挑选你想要的内容。因此,就性能而言,除了没有整页刷新之外,您没有看到任何静态页面的改进。