我想过拥有一个AJAX模块服务层,其控制器和操作与我的模型交互。容易,但不是非常可扩展,并且会违反DRY。如果我改变某个过程的后勤,我将不得不编辑AJAX控制器和普通控制器。
理想情况下,我会为javascript和非javascript用户加载完全相同的操作。我想过可能会检查$_POST['ajax']
,如果设置了,我会为数据加载不同的(json'y)视图。想知道如何/一个好方法(我想象的前端控制器插件?)或者是否有人能指出我的UP TO DATE教程,它描述了构建更大的ajax应用程序的一个非常好的方法。
答案 0 :(得分:5)
您实际上可以使用请求对象来确定是否通过ajax发生了请求,例如:
// from your controller
if($this->getRequest()->isXmlHttpRequest()) {
// an ajax request, do something special (e.g. render partial view)
} else {
// render entire view
}
这基本上是测试x-requested-with
标头(不是总是存在,取决于JS库等)。请参阅(在'检测ajax请求'标题下):
http://framework.zend.com/manual/en/zend.controller.request.html
答案 1 :(得分:1)
您可以检查XmlHttpRequest标头。然而,并非所有的Javascript库都能做到这一点,甚至那些并不一定在所有浏览器中都能做到这一点。
还有AjaxContext,基本上检查“上下文”请求变量,类似于你对$ _POST ['ajax']的想法。
我实际上最终做的与你原来的建议相似。我创建了一个AJAX模块。为了防止大量的控制器代码重复,我创建了一个处理模型上所有操作的服务层,因此我的控制器实际上只负责转换输入请求和显示。