2012-02-28 2 views
1

У меня есть этот код:странный вопрос макет CakePHP (Ajax)

// 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 так же, как и должно быть (и работает в другом наборе control.action + view).

?

+0

Кто-нибудь? пожалуйста? – yossi

ответ

3

Вы можете попробовать:

 

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

Надеется, что это помогает

+0

работает, но мне действительно нужно это понять .. спасибо – yossi

+0

Я считаю, что для запросов Ajax вам не нужен макет, но View - это именно то, что делает метод render(). Эти два параметра относятся к виду и расположению соответственно. То есть, я считаю, что вам не нужна первая строка, так как вторая переопределяет первую. –

+0

Путь MVC требует просмотра, а также торта. tho я приму ваш ответ в конце, я удалил V, поэтому я могу получить другие ответы .. – yossi

0

Вы пробовали настройки $this->layout = null; в действии, которое вызывается в Ajax запроса?

+0

сделано, без эффекта. – yossi

0

Как насчет $this->autoLayout = false;, а затем визуализируйте макет, который вы хотите.

CakePHP определяет autoLayout = true по умолчанию в файле lib\View\View.php. Надеюсь, поможет.

Смежные вопросы