Я сделал то же самое, что и вы, у меня есть контроллер, специально предназначенный для обработки ajax-запросов, однако мое решение намного проще, я использовал функцию init (), а не preDispatch.
Мой init () функция выглядит так
class Ajax_Controller extends Zend_Controller_Action
{
public function init()
{
$this->_helper->layout()->disableLayout();
}
//the rest of the controller...
}
Вот и все!Я не сделал никаких других изменений со стандартным контроллером.
Я отключаю рендеринг представления в действии, если требуется, как я обнаружил, в моем случае мне нужно было представление для отображения таблиц и т. Д. Однако, если вы когда-либовозвращайте данные json, тогда ваш метод отключения рендеринга представлений в preDispatch () вполне допустим.
Если мне нужно вернуть json, у меня есть функция, аналогичная вашей, и я отключаю рендеринг представлений.Использовали этот метод на 4 отдельных, но похожих проектах сейчас без каких-либо проблем.Сказав, что мои ajax-вызовы обычно довольно просты, но я не вижу никаких проблем с этим методом.
Если вы ищете простую, чистую реализацию ajax, то это может быть вариант для вас.