2012-02-28 70 views
1

我有这样的代码:奇怪CakePHP的布局问题(阿贾克斯)

// controller 
function contact($token) { 
    $this->layout = 'ajax'; 
} 

// contact element 
<some html, no php> 

// contact view html + javascript 
<script type="....."> 
.... 
$.post(
    $(this).attr("href"), 
    null, 
    function(data){ 
       $(data).appendTo($(".contact_store_link").parent()).fadeIn(); 
      } 
    ); 
</script> 

<!-- the relevant html --> 
<dd><a class="contact_store_link" href="/stores/contact">link title</a></dd> 

的问题是,无论$this->layout = 'ajax';指令,返回的布局是在appController.beforeFilter()功能设置默认布局。

事情是,除了布局,其余的代码工作得很好。正确的控制器+动作+传递参数。元素和视图也可以正常工作,并且返回的数据包含处理后的数据,只是布局错误。

清除tmp文件夹没有帮助。 我也验证了ajax布局是应该的(并且在另一个controller.action +视图集中工作)。

+0

有人吗?请? – yossi 2012-02-28 23:50:18

回答

3

你可以尝试:

 

function contact($token) { 
    $this->layout = 'ajax'; 
    $this->render("ajax_view_name", FALSE); 
} 
 

希望它可以帮助

+0

的作品,但我真的需要了解它..谢谢 – yossi 2012-02-28 13:20:56

+0

我相信对于Ajax请求,您不需要布局,但视图,正是'render()'方法所做的。这两个参数分别指的是视图和布局。也就是说,我相信你不需要第一行,因为第二行覆盖第一行。 – 2012-02-28 13:40:34

+0

MVC的方式需要视图和蛋糕的布局方式。我会接受你的答案到最后,我删除了V,所以我可能会得到其他答案.. – yossi 2012-02-28 13:55:16

0

您是否尝试过在被称为Ajax请求的动作设置$this->layout = null;

+0

完成,没有任何效果。 – yossi 2012-02-28 13:20:22

0

$this->autoLayout = false;怎么样,然后渲染你想要的布局。

CakePHP默认在lib\View\View.php文件中定义autoLayout = true。希望能帮助到你。