【问题标题】:strange cakePHP layout issue (ajax)奇怪的 cakePHP 布局问题(ajax)
【发布时间】:2012-03-17 21:15:51
【问题描述】:

我有这个代码:

// 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-&gt;layout = 'ajax'; 指令如何,返回的布局都是appController.beforeFilter() 函数中设置的默认布局。

问题是,除了布局之外,其余代码都运行良好。正确的控制器 + 动作 + 传递的参数。元素和视图也可以正常工作,返回的数据包含处理后的数据,只是布局错误。

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

?

【问题讨论】:

    标签: jquery ajax cakephp layout


    【解决方案1】:

    你可以试试:

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

    希望对你有帮助

    【讨论】:

    • 我相信对于 Ajax 请求,您不需要布局,而是需要视图,这正是 render() 方法所做的。这两个参数分别指的是视图和布局。也就是说,我相信您不需要第一行,因为第二行会覆盖第一行。
    • MVC 方式需要视图,蛋糕方式需要布局。最后我会接受你的答案,我删除了 V 所以我可能会得到其他答案..
    【解决方案2】:

    您是否尝试在 ajax 请求中调用的操作中设置 $this-&gt;layout = null;

    【讨论】:

      【解决方案3】:

      $this-&gt;autoLayout = false; 呢,然后渲染你想要的布局。

      CakePHP 默认在lib\View\View.php 文件中定义autoLayout = true。希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-12
        • 2012-03-20
        • 2020-09-10
        • 1970-01-01
        • 2020-03-29
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多