Bem, vou mostrar como se usa AJAX com o Zend Framework. O zend framework utiliza um esquema parecido com o Struts, as Actions.

Estarei utilizando tambem o mootools para facilitar a criação do objeto “AJAX. Estarei considerando que você já está familarizado com o uso do Zend Framework.

Na estrutura da minha aplicação eu tenho um Controller que por sua vez possui diversas actions, e tenho tambem a camada de acesso a dados.

A nossa aplicação será um formulário que possui um input box para digitar um cep e ele irá buscar no banco de dados e retornar os dados.

Um esquema de formulário:


	<form>
	<input type="text" id="cepInsert" onblur="buscaCep()" />
	</form>

O onblur é para quando o componente html perder o focus chamar a função buscaCep().

Função buscaCep():


	function buscaCep(){

		var cep = $('cepInsert').value;
		var queryString = {"cep": cep };
		var opcoes =
		{
			"method":"get",
			"data": queryString,
			"onComplete": completouSolicitacao
		};

		var ajaxObj = new Ajax("<?php echo $this->baseUrl ?>/cep/buscacep", opcoes).request();
	}

A função buscaCep pega o cep digitado e monta a QueryString com esse dado e depois cria o objeto AJAX e faz a requisição. O onComplete é a função que será chamada após a requisição ter sido completada.


Função completouSolicitacao:

	function completouSolicitacao( info ){
		var obj = Json.evaluate( info );

		if(obj.erro == true){
			alert(obj.msgErro);
			return;
		}

                          alert(obj.logradouro+ " " + obj.bairro+ " " + obj.cidade);
	}

A função completouSolicitação apenas pega o objeto JSON retornado e exibe um alert com as informações.

A string montada será essa:

http://localhost/aplicacao/cep/buscaCep?cep=27535010

Como falei antes, o zend possui controladores e actions, nesse caso o cep é o controller e o buscacep é um action que faz parte do mesmo.

CepController.php:


<?php

	class cepController extends Zend_Controller_Action
	{
		function buscacepAction(){

			// LOADER
			Zend_loader::loadClass("Zend_Json");
			Zend_Loader::loadClass('CepDAO');

			$cepString = $this->_request->getParam("cep",-1);

			// Instanciando o objeto de acesso a dados
			$cepDAO  = new CepDAO();

			$retorno = $cepDAO->recuperaCep($cepString);

			// Verificando se ocorreu erro
			if($retorno['erro'] == true){
				@$obj->msgErro = "Cep não encontrado.";
				$obj->erro = true;

			}else {

				$cep = $retorno['cep'];

				@$obj->erro       = false;
				$obj->logradouro = $cep->s_logradouro;
				$obj->bairro     = $cep->s_bairro;
				$obj->cidade     = $cep->s_cidade;
				$obj->uf         = $cep->s_uf;
				$obj->cep        = $cep->s_cep;

			}
			// envia o objeto default para o encode
			$objJson = Zend_Json::encode( $obj );
			// coloca na camada de visao
			$this->view->obj = $objJson;
		}//buscaCep
	} //cepController
?>

cepDAO.php:


	<?php

	class CepDAO extends Zend_Db_Table {

		public function recuperaCep($cep){
			$retorno['erro'] = false;
			try{

				$where   = $this->getAdapter()->quoteInto("s_cep = ?",$cep);
				$cep     = $this->fetchRow($where);
				// Verifica se o cep foi encontrado
				if ($cep != null){
					// Foi Encontrado
					$retorno['cep'] = $cep;

				} else {
					// Não foi Encontrado
					$retorno['erro']    = true;
					$retorno['msgErro'] = 2;
				}

			}catch ( Zend_Db_Exception $e ){
				// Excecao
				$retorno['erro']    = true;
				$retorno['msgErro'] = 1;
			}

			return $retorno;
		}//recuperaCep
	}//CepDAO

	?>

Para cada action, o zend framework procura uma camada de visao de mesmo nome, ou seja, para o buscaCepAction ele irá buscar uma buscaCep.phtml.

O nosso buscaCep.phtml vai apenas ter uma linha que vai ecoar o objeto JSON.

buscaCep.phtml:


	<?php echo $this->obj ?>

O resultado ecoado pela buscaCep.phtml vai ser algo do tipo:

Cep não encontrado:
{”erro”:true,”msgErro”:”Cep não encontrado.”}

Cep encontrado:
{”erro”:false,”logradouro”:”R. João Cabral Flexa”,”bairro”:”Cabral”,”cidade”:”Resende”,”uf”:”RJ”,”cep”:”27535010″}

E pronto, nossa aplicação AJAX está funcionando.