Почему вызовы ajax не загружают макет в CakePHP 2.3

Мне интересно, почему, если я использую функцию jquery $.load или некоторые плагины, такие как fancybox, для динамической загрузки контента на сайт, макет не загружается, а только вид, как если бы он был элементом.

Мой $.load() вызывает действие контроллера, как если бы это была обычная ссылка, например:

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

Это не то, что мне лично не нравится, поэтому я избегаю создания элементов и вызова их с помощью $this->render('/Elements/xxxx', false); из моих контроллеров.

Я хочу знать, является ли это правильным способом работы или это какой-то чит или ошибка cakephp.

Как мы должны относиться к этому типу контента, который не является надлежащим «представлением» (поскольку не будет макета, заголовков и т. д.), а является динамически загружаемым «элементом»? Как вид? Как элемент?

Спасибо.


person Alvaro    schedule 14.06.2013    source источник


Ответы (2)


Проверьте /Layouts/ajax.ctp, это макет, который отображается для вызовов ajax. Обычно вы не хотите, чтобы весь верхний и нижний колонтитулы были вокруг элемента, который вы запрашиваете при выполнении вызова ajax.

person floriank    schedule 14.06.2013
comment
Я нигде не указываю макет ajax. Обнаруживает ли он вызов ajax автоматически? - person Alvaro; 14.06.2013
comment
Если вы используете компонент RequestHandler, CakePHP будет автоматически переключать макеты при обнаружении Ajax-запроса. - person RichardAtHome; 14.06.2013

Burzum на правильном пути.

Ваш контроллер загрузит макет по умолчанию, если вы не скажете ему использовать /Layouts/ajax.ctp. Таким образом, в вашей функции редактирования вы захотите переключать макеты в зависимости от того, как вызывается функция. Например:

if($this->request->is('ajax')){
    $this->layout = 'ajax';
}// else use controller default...or specify another layout to use here.
person jRoB    schedule 14.06.2013
comment
Что ж, мне не нужно указывать макет, как я уже сказал, потому что я использую компонент RequestHandler. - person Alvaro; 14.06.2013