为什么ajax调用不会在CakePHP 2.3中加载布局

时间:2013-06-14 13:43:22

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3

我想知道为什么如果我使用jquery $.load函数或某些插件如fancybox在网站上动态加载内容,则不会加载layoug而只会将视图视为元素。

我的$.load()调用控制器操作,就像它是普通链接一样,如:

$('#demo').load("http://"+ document.domain +"/tables/users/edit/", {input : data}, function(dat){
     //whatever
});

这不是我个人不喜欢的东西,像这样我避免创建元素并使用我的控制器中的$this->render('/Elements/xxxx', false);来调用它们。

我想知道这是否是正确的合作方式,或者是否是某种作弊行为或者cakephp的错误。

我们应该如何对待这种不适合“视图”的内容(因为没有布局,标题......等),而是动态加载“元素”?作为一个观点?作为一个元素?

感谢。

2 个答案:

答案 0 :(得分:2)

检查/Layouts/ajax.ctp这是为ajax调用呈现的布局。通常,您不希望在执行ajax调用时在请求的元素周围包含所有页眉和页脚。

答案 1 :(得分:0)

Burzum走在正确的轨道上。

除非您告诉它使用/Layouts/ajax.ctp,否则您的控制器将加载默认布局。因此,在编辑功能中,您需要根据函数的调用方式切换布局。例如:

if($this->request->is('ajax')){
    $this->layout = 'ajax';
}// else use controller default...or specify another layout to use here.