Я пытаюсь использовать Ajax в CakePHP, и никуда не денусь!
У меня есть страница с серией кнопок - нажатие одной из них должно отобразить определенный контент на текущей странице. Важно, чтобы страница не перезагружалась, потому что будет отображаться фильм, и я не хочу, чтобы фильм сбрасывался.
Есть несколько разных кнопок с различным содержанием для каждой; этот контент потенциально довольно большой, поэтому я не хочу загружать его, пока он не понадобится.
Обычно я делал бы это через jQuery, но я не могу заставить его работать в CakePHP.
Пока у меня есть:
На виде, кнопка управления выглядит следующим образом:
$this->Html->link($this->Html->image('FilmViewer/notes_link.png', array('alt' => __('LinkNotes', true), 'onclick' => 'showNotebook("filmNotebook");')), array(), array('escape' => false));
Под этим есть div, называемый filmNotebook, где я хотел бы показать новый контент.
В моем файле functions.js (в webroot / scripts) у меня есть эта функция:
function showNotebook(divId) {
// Find div to load content to
var bookDiv = document.getElementById(divId);
if(!bookDiv) return false;
$.ajax({
url: "ajax/getgrammar",
type: "POST",
success: function(data) {
bookDiv.innerHTML = data;
}
});
return true;
}
Для генерации простого содержимого, которое будет показано в div, я установил следующее в route.php:
Router::connect('/ajax/getgrammar', array('controller' => 'films', 'action' => 'getgrammar'));
В films_controller.php функция getgrammar имеет вид:
function getgrammar() {
$this->layout = 'ajax';
$this->render('ajax');
}
Файл макета просто имеет:
и в настоящее время ajax.ctp вида просто:
<div id="grammarBook">
Here's the result
</div>
Проблема в том, что когда я нажимаю кнопку, я получаю макет по умолчанию (так, как будто страница появляется на моей странице) с индексной страницей фильмов в ней. Это как если бы оно не находило правильное действие в films_controller.php
Я сделал все, что было предложено в руководстве CakePHP (http://book.cakephp.org/view/1594/Using-a-specific-Javascript-engine).
Что я делаю не так? Я открыт для предложений о лучших способах сделать это, но я также хотел бы знать, как должен работать Ajax, для дальнейшего использования.
Спасибо за любую помощь, которую может предложить каждый.