2012-02-28 73 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。希望能幫助到你。