Olá pessoal!

Esta semana estou trabalhando num projeto onde a utilização de Ajax está sendo muito útil em termos de performance e facilidade na busca de produtos no banco de dados.

Como estou utilizando Zend Framework no projeto, vou explicar resumidamente como trabalhar com requisições Ajax no ZF.

Basicamente, o óbvio seria desabilitar a renderização da view por padrão em sua action e também desabilitar o layout, caso esteja usando-o.

// outros códigos do controller

public function testeAction()  
{  
    $this->_helper->viewRenderer->setNoRender();  
    $this->_helper->layout->disableLayout();  
    //..  
}

Como já é de se esperar, o ZF possui um Action Helper que facilita muito a vida. Do jeito acima, eu teria que renderizar uma view na mão para retornar alguma coisa pra solicitação Ajax. O jeito do Zend te permite escolher o que irá retornar (html ou json), padronizar o nome do arquivo da *view *que será chamado, e desabilitar o layout pra você.

Vamos colocar no nosso método preDispatch a chamada para nosso helper ajaxContext:

public function preDispatch()  
{  
    $ajaxContext = $this->_helper->getHelper('AjaxContext');  
    $ajaxContext->addActionContext('teste', 'html')  
        ->addActionContext('outra-action', 'html')  
        ->initContext();  
}

Desta forma, eu já estou dizendo pro meu controller que os métodos ajax e outra-action são acessados por requisições Ajax e retornaram código HTML.

Pra facilitar ainda mais nossa vida o Zend já vai chamar automaticamente a view teste.ajax.phtml na pasta de views do controller. Isso facilita ainda mais a padronização de arquivos.

Caso não queira retornar HTML, posso retornar JSON bastando alterar a chamada no preDispatch:

public function preDispatch()  
{  
    $ajaxContext = $this->_helper->getHelper('AjaxContext');  
    $ajaxContext->addActionContext('teste', 'json')  
        ->addActionContext('outra-action', 'html')  
        ->initContext();  
}

Desta forma minha action teste irá me retornar JSON. Posso utilizar associações de variáveis nas views normalmente que o Zend transformará o código em JSON:

public function testeAction()  
{  
    // demais códigos

    $this->view->valor1 = $valor1;  
    $this->view->valor2 = $valor2;

    // o Zend transformará todas as variáveis da view em JSON  
}

Em alguns casos, será necessário acrescentar ?format=html ou ?format=json à sua URL na chamada do Ajax (jQuery, etc), avisando o Zend o que ele precisa.

Para maiores informações sobre o AjaxContext acesse a documentação oficial do Zend Framework.

É isso aí! Ajax com Zend Framework é bem tranquilo de entender e bastante eficiente!