Cakephp 2.4.2-默认布局加载,而不是ajax布局

Cakephp 2.4.2-默认布局加载,而不是ajax布局,ajax,cakephp,layout,default,Ajax,Cakephp,Layout,Default,我尝试加载ajax布局,但每次都是正在加载的默认布局 public function getByZone() { $this->layout = 'ajax'; ... } 因此,我的组合框包含我的所有default.ctp,而不是我的“ajax答案” 我在网上找到了很多解决方案,但都不管用 使用$this->layout=false,$this->render('my\u view\u name',false),$this->autoRe

我尝试加载
ajax
布局,但每次都是正在加载的默认布局

public function getByZone() {
        $this->layout = 'ajax';    
        ...
    }
因此,我的组合框包含我的所有default.ctp,而不是我的“ajax答案”

我在网上找到了很多解决方案,但都不管用

使用
$this->layout=false,$this->render('my\u view\u name',false),$this->autoRender=false,

查看我的AppController中是否没有任何beforeRender


如果您有任何解决方案,我们将感谢您的帮助。

首先尝试在浏览器中使用常规URL。这将告诉您这是ajax调用还是代码中的某些内容。通常情况下,我会尽量简化事情,以减少导致问题的因素。

我有Cakephp 2.0并升级到2.4,当我遇到这个问题时,我非常确定我也遇到了同样的问题。最后我换了衣服

$this->render('ajax', 'success');

但这还不是全部!更进一步说,也许只是因为我做事的方式很糟糕,我改变了

$this->request->params['url']

i、 e.我在这个url中的http参数bozopants现在在控制器中的地址是$this->request->query['bozopants']


当然,这是在具有相当严格的身份验证限制的控制器中发生的。

添加
$this->autoRender=false

页面上可能有重定向,请确保您可以访问“getByZone”函数,或者如果需要登录CakePHP 2.5.4中的应用程序,我只使用以下几行代码仅呈现JSON输出:

   $this->set("data", $myData);
// $this->render(string $view, string $layout);
   $this->render(false, "ajax"); // Not using a view, only using a layout "ajax".

在“ajax”布局中,变量$data将作为viewVariable提供。

尝试使用
$this->layout='ajax'
在您的视图文件中是否存在
ajax.ctp
呢?我刚刚尝试在视图文件的顶部添加$this->layout='ajax',但没有任何更改。是的,存在ajax.ctp,它与其他布局一样位于View/Layouts/ajax.ctp中@谢谢你的编辑。你的布局是在其他地方设置的吗?例如,在beforeRender()中(无论是在控制器本身中,还是在app_控制器中?如果是,则在控制器逻辑执行后,将覆盖控制器中设置的任何内容。添加$this->autoRender=false;并确保ajax.ctp存在
$this->request->query
   $this->set("data", $myData);
// $this->render(string $view, string $layout);
   $this->render(false, "ajax"); // Not using a view, only using a layout "ajax".