【问题标题】:Why ajax calls doesn't load the layout in CakePHP 2.3为什么 ajax 调用不加载 CakePHP 2.3 中的布局
【发布时间】:2013-06-14 13:43:22
【问题描述】:

我想知道为什么如果我使用 jquery $.load 函数或诸如fancybox 之类的插件在站点上动态加载内容,则不会加载layout,而只会加载视图,就好像它是一个元素一样。

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

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

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

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

我们应该如何处理这种类型的内容,它不是一个正确的“视图”(因为没有布局、标题等),而是一个动态加载的“元素”?作为一种观点?作为一个元素?

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我没有在任何地方指定ajax 布局。它会自动检测 ajax 调用吗?
    • 如果你正在使用 RequestHandler 组件,CakePHP 会在检测到 Ajax 请求时自动切换布局。
    【解决方案2】:

    Burzum 走在正确的轨道上。

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

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

    【讨论】:

    • 好吧,我不需要像我说的那样指定布局,因为我使用的是RequestHandler组件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    相关资源
    最近更新 更多