Foros del Web » Programando para Internet » PHP » Zend »

[problema] ZF y AJAX

Estas en el tema de [problema] ZF y AJAX en el foro de Zend en Foros del Web. Hola De nuevo por aquí tratando de encontrar ayuda, estoy tratando de usar AJAX con ZF pero no resulta, esta es la situacion. Tengo lo ...
  #1 (permalink)  
Antiguo 01/02/2011, 18:21
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
[problema] ZF y AJAX

Hola

De nuevo por aquí tratando de encontrar ayuda, estoy tratando de usar AJAX con ZF pero no resulta, esta es la situacion. Tengo lo siguiente un formulario con criterios establecidos en radiobuttons, busca por apellido o por rut, una caja para introducir el cliente a buscar con la particularidad de que comenzara la búsqueda a partir del segundo carácter tipeado por el usuario en la caja, enviara mediante AJAX la solicitud al controlador clientes acción search y este devolverá una estructura XML para ser procesada por el script de javascript, donde almacenara los resultados devueltos en un select (lista) creando un elemento option por cada ítem devuelto en el resultado.

Este código me funcionaba pero con programacion procedimental no OOP.-

Aqui dejo el codigo.

Controller: Clientes, Action: Search
Código PHP:
Ver original
  1. public function searchAction()
  2.     {
  3.         $this->_helper->layout->disableLayout();
  4.         $_request = $this->getRequest();
  5.        
  6.         if ($_request->isGet())
  7.         {
  8.             $filtro = $_request->getQuery('filtro');
  9.             $criterio = $_request->getQuery('criterio');
  10.            
  11.             if (null !== $filtro && null !== $criterio)
  12.             {
  13.                 //instancio el modelo para invocar al metodo
  14.                 $clientes= new Application_Model_Clientes();
  15.                 echo $clientes->search($filtro, $criterio);
  16.             }
  17.         }
  18.     }

Clientes Model
Código PHP:
Ver original
  1. public function search($p1, $p2)
  2.      {
  3.         return $this->getMapper()->search($p1, $p2);
  4.      }

Clientes Mapper
Código PHP:
Ver original
  1. public function search($p1, $p2)
  2.     {
  3.         $select = $this->getDbTable()->select()
  4.                                     ->from(array('pac' => 'clientes'),
  5.                                            array('rut'=>'pac.rut',
  6.                                                  'nombre'=>'CONCAT(pac.nombres," ",pac.apellidoPaterno)'))
  7.                                     ->where($p1.' LIKE ?', '%'.$p2.'%')
  8.                                     ->order('apellidoPaterno ASC');
  9.                                    
  10.         $resultSet = $this->getDbTable()->fetchAll($select);
  11.         if (0 < count($resultSet)) {
  12.             $entries   = array();
  13.             $xml = "<?xml version='1.0' encoding='utf-8' ?>\n"."<items>\n";
  14.             foreach ($resultSet as $row) {
  15.                 $xml = $xml."<RUT>".$row->rut."</RUT>\n";
  16.                 $xml = $xml."<NOMBRES>".$row->nombre."</NOMBRES>\n";
  17.             }
  18.         } else {
  19.             $xml = $xml."<RUT>1</RUT>\n";
  20.             $xml = $xml."<NOMBRES>No se encontraron coincidencias</NOMBRES>\n";
  21.         }  
  22.         $xml = $xml ."</items>";   
  23.         return $xml;
  24.     }

VIEW SEARCH

Código HTML:
Ver original
  1. <?php echo $this->doctype() ?>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Sistema Informatico Clinica</title>
  5. <?php $this->headLink()->appendStylesheet('/css/global.css') ?>
  6. <?php $this->headLink()->appendStylesheet('/css/master.css') ?>
  7. <?php echo $this->headLink() ?>
  8. <script type="text/javascript" src="/js/funciones.js"></script>
  9. <script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
  10.  
  11. <script type="text/javascript">
  12.  
  13. var httpReq;    //objeto para realizar peticiones HTTP
  14. var items;  //Contendrá el XML obtenido para los elementos de la lista
  15. var ids;    //Contendrá el XML obtenido para los elementos de la lista
  16. var tipo;  //Contendra el XML obtenido para el elemento TIPO
  17. var valores;    //Contendrá el XML obtenido para los elementos de la lista
  18.  
  19. //Se encarga de cargar los items de la lista secundaria
  20. function loadItems(tipo)
  21. {
  22.     var filtro;
  23.  
  24.     if (document.frm_buscar_clientes.filtros[0].checked){
  25.         filtro='apellidoPaterno';
  26.     } else {
  27.         filtro='rut';
  28.     }
  29.     getXML("/filtro/"+filtro+"/criterio/"+tipo);
  30. }
  31.  
  32. //Carga el RSS en el objeto rssXML
  33. function getXML(url)
  34. {
  35.     //Si es Mozilla, Opera o safari (entre otros que lo soportan como objeto nativo del navegador)
  36.     if (window.XMLHttpRequest)
  37.     {
  38.         httpReq = new XMLHttpRequest();
  39.     }
  40.     else    //Internet Explorer lo expone como control Active X
  41.     {
  42.         httpReq = new ActiveXObject("Microsoft.XMLHTTP");
  43.     }
  44.     //Ya debería tener una referencia al objeto
  45.     if (httpReq != null)
  46.     {
  47.         httpReq.onreadystatechange = finCarga;
  48.         httpReq.open("GET", url, true)  //El true del final es para que lo solicite de forma asíncrona
  49.         httpReq.send(null); //al ser una petición GET no va nada en el cuerpo de la petición, de ahí el null
  50.     }
  51. }
  52.  
  53. //Función que se ejecuta cuando cambia el estado de la carga del objeto httpReq
  54. function finCarga()
  55. {
  56.     if (httpReq.readyState == 4)    //4: completado, 3: en curso, 1:cargado, 0: no iniciado
  57.     {
  58.         if (httpReq.status == 200)  //200: OK (código HTTP, podría haber sido 404 (no encontrado), 500 (error), etc...)
  59.         {
  60.             items = httpReq.responseXML.getElementsByTagName("NOMBRES");    //Coge sólo los elementos "item"
  61.             ids= httpReq.responseXML.getElementsByTagName("RUT");   //Coge sólo los elementos "item"   
  62.             ProcesaItems();
  63.         }
  64.         else    //Se produjo un error
  65.         {
  66.             alert("No se pudo recuperar la información de la lista secundaria: " + httpReq.statusText);
  67.         }
  68.     }
  69. }
  70.  
  71. //Procesa los items del RSS
  72. function ProcesaItems()
  73. {
  74.     listaSec = document.getElementById("mnuSecundario");
  75.     if (listaSec != null)
  76.     {
  77.         listaSec.options.length = 0;    //Vacía la lista de opciones
  78.         //Cargamos las nuevas opciones
  79.         for(i=0; i<items.length; i++)
  80.         {
  81.            
  82.             var opc = document.createElement("OPTION");
  83.             opc.text = items[i].childNodes[0].nodeValue;
  84.             opc.value = ids[i].childNodes[0].nodeValue;
  85.  
  86.             listaSec.options.add(opc);
  87.             if (ids[i].childNodes[0].nodeValue == 0 || items[i].childNodes[0].nodeValue == 'No se encontraron coincidencias')
  88.             {          
  89.                 listaSec.disabled=true; //PARA EL CASO DE NO HABER RESULTADOS INABILITO EL SELECTOR
  90.             } else {
  91.                 listaSec.disabled=false;   
  92.                 listaSec.options[0].selected = true; //si se encontraron coincidencias marco la primera opcion de la lista como seleccionada               
  93.                
  94.             }
  95.         }
  96.     }
  97. }
  98.  
  99. function CargaPagina(dato){
  100.  
  101.         listaSec = document.getElementById("mnuSecundario");
  102.         var textoSel = '0';
  103.         var valorSel = '0';
  104.  
  105.         if(document.frm_buscar_clientes.mnuSecundario.selectedIndex != -1 && listaSec.value != ''){
  106.                 textoSel = document.frm_buscar_clientes.mnuSecundario.options[document.frm_buscar_clientesentes.mnuSecundario.selectedIndex].text;
  107.                 valorSel = document.frm_buscar_clientes.mnuSecundario.value;
  108.                 parent.infFrame.location.href = '/clientes/edit/rut/'+valorSel;
  109.             }
  110.  
  111. }
  112. </head>
  113. <div class="outerbox" >
  114.  
  115.     <form
  116.          name="frm_buscar_clientes"
  117.              id="frm_buscar_clientes"
  118.                 method="post"
  119.                     action="/clientes/search/" >
  120.  
  121.         <div class="mainHeading"><h4>Buscador de clientes</h4></div>
  122.            
  123.                 <table cellspacing="0" cellpadding="0" class="data-table" id="clientes-table" >
  124.                     <tr >
  125.                                                 <td scope="col">
  126.                             Filtros
  127.  
  128.                         </td>
  129.                                                 <td scope="col">
  130.                             <input name="filtros" type="radio" value="apellidoPaterno" checked>&nbsp;&nbsp;Apellido Paterno
  131.                         </td>
  132.  
  133.                                                 <td scope="col">
  134.                             <input name="filtros" type="radio" value="rut">&nbsp;&nbsp;Rut            
  135.                         </td>
  136.  
  137.                     </tr>
  138.  
  139.                     <tr>
  140.                         <td colspan="3" style="height:2px"></td>
  141.                     </tr>
  142.                    
  143.                     <tr >
  144.                                                 <td scope="col">
  145.                             Texto a Buscar
  146.  
  147.                         </td>
  148.                                                 <td scope="col" colspan="2">
  149. <input name="mnuPrimario" type="text" id="mnuPrimario" onKeyUp="this.value=this.value.toUpperCase(); if (this.value.length>2){loadItems(this.value);};" size="50">
  150.                             </td>
  151.  
  152.                     </tr>
  153.                    
  154.                     <tr>
  155.                         <td colspan="3" style="height:2px"></td>
  156.                     </tr>
  157.  
  158.                     <tr >
  159.                                                 <td scope="col">
  160.                             Coincidencias
  161.  
  162.                         </td>
  163.                                                 <td scope="col" colspan="2">
  164.                                                 <select name="mnuSecundario" style="width:300px;" size="5" id="mnuSecundario" onclick="LoadClientesInfo(this.value);" disabled="disabled">
  165.           <option value="">[Ingrese texto a buscar en la caja superior]</option>
  166.         </select>   <input name="hayseleccion" type="hidden" value="0">                     </td>
  167.  
  168.                     </tr>
  169.                    
  170.                 </table>
  171.     </form>
  172.  
  173. </div>
  174. </body>
  175. </html>
  176. <script type="text/javascript">
  177.     <!--
  178.         if (document.getElementById && document.createElement) {
  179.             roundBorder('outerbox');
  180.         }
  181.    -->

Saludos y espero me ayuden..
  #2 (permalink)  
Antiguo 01/02/2011, 18:42
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [problema] ZF y AJAX

  1. Que error te muestra ?
  2. Deberías utilizar los contextos, y refactorizar, clientes mapper (search) debería retornar el resultset y en el controller lo seteas a la vista y en esta iterar y generar la estructura xml.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 01/02/2011, 19:08
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: [problema] ZF y AJAX

1 .- Este error lo obtengo desde la consola de errores de firefox, Error: httpReq.responseXML is null Archivo de origen: http://sistema.local/clientes/search/
Línea: 58 -> items = httpReq.responseXML.getElementsByTagName("NOMBRES" );

2.- Donde y como tengo que implementar lo que me sugieres, podrias ayudarme integrandolo al codigo que coloque.

Saludos
  #4 (permalink)  
Antiguo 01/02/2011, 19:32
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [problema] ZF y AJAX

Ok, primero refactoriza y que se envien correctamente las cabeceras y luego, vemos si el error persiste.

Para refactorizar:

ClientesMapper debe devolver el resultset

Código PHP:
Ver original
  1. public function search($p1, $p2)
  2. {
  3.    $select = $this->getDbTable()->select()
  4.     ->from(array('pac' => 'clientes'),
  5.     array('rut'=>'pac.rut', 'nombre'=>'CONCAT(pac.nombres, " " , pac.apellidoPaterno)'))
  6.     ->where($p1.' LIKE ?', '%'.$p2.'%')
  7.     ->order('apellidoPaterno ASC');
  8.                                    
  9.     return $this->getDbTable()->fetchAll($select);
  10. }

ClientesController inicializa los contextos y asigna el resultado del mapper a la vista.

Código PHP:
Ver original
  1. class ClientesController extends Zend_Controller_Action
  2. {
  3.     public function init()
  4.     {
  5.         $contextSwitch = $this->_helper->getHelper('contextSwitch');
  6.         $contextSwitch->addActionContext('search', 'xml')
  7.                       ->initContext();
  8.     }
  9.  
  10.     public function searchAction()
  11.     {              
  12.         $_request = $this->getRequest();
  13.        
  14.         if ($_request->isGet())
  15.         {
  16.             $filtro = $_request->getQuery('filtro');
  17.             $criterio = $_request->getQuery('criterio');
  18.            
  19.             if (null !== $filtro && null !== $criterio)
  20.             {
  21.                 //instancio el modelo para invocar al metodo
  22.                 $clientes= new Application_Model_Clientes();
  23.                 $this->view->clientes = $clientes->search($filtro, $criterio);
  24.             }
  25.         }
  26.     }  
  27. }

En la vista del contexto iterar y crear el xml, el fichero se debe llamar search.xml.phtml

Código HTML:
Ver original
  1. <?xml version='1.0' encoding='utf-8' ?>
  2. <items>
  3. <?php if (0 < count($this->clientes)) : ?>
  4. <?php foreach ($this->clientes as $row) : ?>
  5.      <RUT><?php echo $row->rut; ?></RUT>
  6.      <NOMBRES><?php echo $row->nombre; ?></NOMBRES>
  7. <?php endforeach; ?>
  8. <?php else : ?>
  9.     <RUT>1</RUT>
  10.     <NOMBRES>No se encontraron coincidencias</NOMBRES>
  11. <?php endif; ?>  
  12. </items>

Y por último la peticion ajax debe tener el parametro format con el contexto

Código Javascript:
Ver original
  1. ...
  2. function loadItems(tipo)
  3. {
  4.     var filtro;
  5.  
  6.     if (document.frm_buscar_clientes.filtros[0].checked){
  7.         filtro='apellidoPaterno';
  8.     } else {
  9.         filtro='rut';
  10.     }
  11.     getXML("/filtro/"+filtro+"/criterio/"+tipo+"/format/xml");
  12. }
  13. ...

Debería ser algo así, no lo eh probado así que puede tener typos, probalo y si falla algo comentalo.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #5 (permalink)  
Antiguo 01/02/2011, 20:32
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: [problema] ZF y AJAX

masterpuppet

Acabo de implementar lo que publicaste, apesar de que limpia la lista donde debe colocar las coincidencias no muestra ninguna la deja vacia, pero tengo una duda, la situación actual es que mediante la acción search yo cargo el form de búsqueda y el javascript que crea la petición Ajax.

Lo que pasa es que deben ingresar un texto en un input text, ese texto se envía mediante ajax al controller/action(clientes/search), devuelve los resultados para ser presentados en el mismo view search pero en un elemento de form distinto una lista (select size=3)

Otra cosa he debuggeado parte por parte el action search y me parece que falla en esta parte $this->view->clientes = $clientes->search($filtro, $criterio);

El contextSwitch deshabilita el layout como habria el action search de enviar contenido al view search.xml.phtml

Cuando escribo esto /clientes/search?format=xml o /clientes/search/format/xml en el search.phtml en la funcion loadItems en la llamada a la funcion getXML funciona pero muestra el valor estatico(VALOR ELSE), no envia parametros como filtro y criterio para ser evaluados por el modelo y retornar el registro a buscar.

Gracias

Última edición por Fenris; 02/02/2011 a las 09:15
  #6 (permalink)  
Antiguo 02/02/2011, 10:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: [problema] ZF y AJAX

NO FUNCIONA EL CONTEXTSWITCH, lo he pasado de todas formas POST/GET validando en el action si es una peticion ajax mediante el metodo isXmlHttpRequest() y nada solo funciona si coloco en la funcion ajax como parametro url /controller/action/format/xml pero no hay caso que funcione si coloco parametros para ser capturados por el controller.

La idea seria enviar algo asi /clientes/search/format/xml/filtro/nombreFiltro/criterio/criteriobusqueda
en el controlador clientes action search captura las variables filtro y criterio pasarlas al modelo y que este retorne el valor buscado.


Espero puedan ayudarme.
  #7 (permalink)  
Antiguo 02/02/2011, 10:24
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: [problema] ZF y AJAX

Que tal Fenris, funciona, lo he probado con el código que pusiste arriba, la url debe ser controller:action:param1:param2, algo asi:

Código Javascript:
Ver original
  1. function loadItems(tipo)
  2. {
  3.     var filtro;
  4.  
  5.     if (document.frm_buscar_clientes.filtros[0].checked){
  6.         filtro='apellidoPaterno';
  7.     } else {
  8.         filtro='rut';
  9.     }
  10.     getXML("/clientes/search/filtro/"+filtro+"/criterio/"+tipo+"/format/xml");
  11. }

y tenes que tener en search.phtml únicamente el código de la vista, porque es un layout completo ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 02/02/2011, 10:37
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: [problema] ZF y AJAX

Hola masterpuppet

search.phtml es solo una vista dentro de un layout pero de hecho en el action desactivo el layout

search.phtml
Código HTML:
Ver original
  1. <?php echo $this->doctype() ?>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4.  
  5. <?php $this->headLink()->appendStylesheet('/css/global.css') ?>
  6. <?php $this->headLink()->appendStylesheet('/css/master.css') ?>
  7. <?php echo $this->headLink() ?>
  8. <script type="text/javascript" src="/js/funciones.js"></script>
  9. <script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>
  10.  
  11. <script type="text/javascript">
  12.  
  13. var httpReq;    //objeto para realizar peticiones HTTP
  14. var items;  //Contendrá el XML obtenido para los elementos de la lista
  15. var ids;    //Contendrá el XML obtenido para los elementos de la lista
  16. var tipo;  //Contendra el XML obtenido para el elemento TIPO
  17. var valores;    //Contendrá el XML obtenido para los elementos de la lista
  18.  
  19. //Se encarga de cargar los items de la lista secundaria
  20. function loadItems(searchCriteria)
  21. {
  22.     var filtro;
  23.  
  24.     if (document.frm_buscar_clientes.filtros[0].checked){
  25.         filtro='apellidoPaterno';
  26.     } else {
  27.         filtro='rut';
  28.     }
  29.     ///filtro/"+filtro+"/criterio/"+searchCriteria
  30.     getXML("/clientes/search/format/xml/filtro/"+filtro+"/criterio/"+searchCriteria);
  31. }
  32.  
  33. //Carga el RSS en el objeto rssXML
  34. function getXML(url)
  35. {
  36.     //Si es Mozilla, Opera o safari (entre otros que lo soportan como objeto nativo del navegador)
  37.     if (window.XMLHttpRequest)
  38.     {
  39.         httpReq = new XMLHttpRequest();
  40.     }
  41.     else    //Internet Explorer lo expone como control Active X
  42.     {
  43.         httpReq = new ActiveXObject("Microsoft.XMLHTTP");
  44.     }
  45.     //Ya debería tener una referencia al objeto
  46.     if (httpReq != null)
  47.     {
  48.         httpReq.open("GET", url, true)  //El true del final es para que lo solicite de forma asíncrona
  49.         httpReq.onreadystatechange = finCarga;
  50.  
  51.         httpReq.send(null); //al ser una petición GET no va nada en el cuerpo de la petición, de ahí el null
  52.     }
  53. }
  54.  
  55. //Función que se ejecuta cuando cambia el estado de la carga del objeto httpReq
  56. function finCarga()
  57. {
  58.     if (httpReq.readyState == 4)    //4: completado, 3: en curso, 1:cargado, 0: no iniciado
  59.     {
  60.         if (httpReq.status == 200)  //200: OK (código HTTP, podría haber sido 404 (no encontrado), 500 (error), etc...)
  61.         {
  62.             ids= httpReq.responseXML.getElementsByTagName("RUT");  
  63.             items = httpReq.responseXML.getElementsByTagName("NOMBRES");   
  64.             ProcesaItems();
  65.         }
  66.         else    //Se produjo un error
  67.         {
  68.             alert("No se pudo recuperar la información de la lista secundaria: " + httpReq.statusText);
  69.         }
  70.     }
  71. }
  72.  
  73. //Procesa los items del RSS
  74. function ProcesaItems()
  75. {
  76.     listaSec = document.getElementById("mnuSecundario");
  77.     if (listaSec != null)
  78.     {
  79.         listaSec.options.length = 0;    //Vacía la lista de opciones
  80.  
  81.         //Cargamos las nuevas opciones
  82.         for(i=0; i<ids.length; i++)
  83.         {
  84.             var opc = document.createElement("OPTION");
  85.             opc.text = items[i].childNodes[0].nodeValue;
  86.             opc.value = ids[i].childNodes[0].nodeValue;
  87.  
  88.             listaSec.options.add(opc);
  89.             if (ids[i].childNodes[0].nodeValue == 0 || items[i].childNodes[0].nodeValue == 'No se encontraron coincidencias')
  90.             {          
  91.                 listaSec.options[0] = new Option('paso por aqui','0');
  92.                 listaSec.disabled=true; //PARA EL CASO DE NO HABER RESULTADOS INABILITO EL SELECTOR            
  93.             } else {
  94.                 listaSec.disabled=false;   
  95.                 listaSec.options[0].selected = true; //si se encontraron coincidencias marco la primera opcion de la lista como seleccionada               
  96.                
  97.             }
  98.         }
  99.     }
  100. }
  101.  
  102. function CargaPagina(dato){
  103.  
  104.         listaSec = document.getElementById("mnuSecundario");
  105.         var textoSel = '0';
  106.         var valorSel = '0';
  107.  
  108.         if(document.frm_buscar_clientes.mnuSecundario.selectedIndex != -1 && listaSec.value != ''){
  109.                 textoSel = document.frm_buscar_clientes.mnuSecundario.options[document.frm_buscar_clientes.mnuSecundario.selectedIndex].text;
  110.                 valorSel = document.frm_buscar_clientes.mnuSecundario.value;
  111.                 parent.infFrame.location.href = '/clientes/edit/rut/'+valorSel;
  112.             }
  113.  
  114. }
  115. </head>
  116. <div class="outerbox" >
  117.  
  118.     <form
  119.          name="frm_buscar_clientes"
  120.              id="frm_buscar_clientes"
  121.                 method="post"
  122.                     action="/clientes/search/" >
  123.  
  124.         <div class="mainHeading"><h4>Buscador de clientes</h4></div>
  125.            
  126.                 <table cellspacing="0" cellpadding="0" class="data-table" id="clientes-table" >
  127.                     <tr >
  128.                                                 <td scope="col">
  129.                             Filtros
  130.  
  131.                         </td>
  132.                                                 <td scope="col">
  133.                             <input name="filtros" type="radio" value="apellidoPaterno" checked>&nbsp;&nbsp;Apellido Paterno
  134.                         </td>
  135.  
  136.                                                 <td scope="col">
  137.                             <input name="filtros" type="radio" value="rut">&nbsp;&nbsp;Rut            
  138.                         </td>
  139.  
  140.                     </tr>
  141.  
  142.                     <tr>
  143.                         <td colspan="3" style="height:2px"></td>
  144.                     </tr>
  145.                    
  146.                     <tr >
  147.                                                 <td scope="col">
  148.                             Texto a Buscar
  149.  
  150.                         </td>
  151.                                                 <td scope="col" colspan="2">
  152. <input name="mnuPrimario" type="text" id="mnuPrimario" onBlur="javascript:loadItems(this.value)" size="50">
  153. <!--onKeyUp="this.value=this.value.toUpperCase(); if (this.value.length>2){loadItems(this.value);};"-->
  154.                             </td>
  155.  
  156.                     </tr>
  157.                    
  158.                     <tr>
  159.                         <td colspan="3" style="height:2px"></td>
  160.                     </tr>
  161.  
  162.                     <tr >
  163.                                                 <td scope="col">
  164.                             Coincidencias
  165.  
  166.                         </td>
  167.                                                 <td scope="col" colspan="2">
  168.                                                 <select name="mnuSecundario" style="width:300px;" size="5" id="mnuSecundario" onclick="LoadClientesInfo(this.value);" disabled="disabled">
  169.           <option value="">[Ingrese texto a buscar en la caja superior]</option>
  170.         </select>   <input name="hayseleccion" type="hidden" value="0">                     </td>
  171.  
  172.                     </tr>
  173.                    
  174.                 </table>
  175.     </form>
  176.  
  177. </div>
  178. </body>
  179. </html>
  180. <script type="text/javascript">
  181.     <!--
  182.         if (document.getElementById && document.createElement) {
  183.             roundBorder('outerbox');
  184.         }
  185.    -->

ClientesController
Código PHP:
Ver original
  1. public function searchAction()
  2.     {
  3.         $this->_helper->layout->disableLayout();   
  4.  
  5.         $_request = $this->getRequest();
  6.  
  7.         if ($_request->isPost() || $this->getRequest()->isXmlHttpRequest() || $_request->isGet())
  8.         {
  9.             $filtro = $_request->getParam('filtro');
  10.             $criterio = $_request->getParam('criterio');
  11.                
  12.             if (null !== $filtro && null !== $criterio)
  13.             {
  14.                 //instancio el modelo para invocar al metodo
  15.                 $clientes= new Application_Model_Clientes();
  16.                 $this->view->clientes= $clientes->search($filtro, $criterio);
  17.             }
  18.         }
  19.        
  20.     }

ClientesModel
Código PHP:
Ver original
  1. public function search($p1, $p2)
  2.      {
  3.         return $this->getMapper()->search($p1, $p2);
  4.      }

ClientesMapper
Código PHP:
Ver original
  1. public function search($p1, $p2, Application_Model_Pacientes $pacientes)
  2.     {
  3.         $select = $this->getDbTable()->select()
  4.                                     ->from(array('pac' => 'pacientes'),
  5.                                            array('rut'=>'pac.rut',
  6.                                                  'nombre'=>'CONCAT(pac.nombres," ",pac.apellidoPaterno)'))
  7.                                     ->where($p1.' LIKE ?', '%'.$p2.'%')
  8.                                     ->order('apellidoPaterno ASC');
  9.  
  10. /*      $resultSet = $this->getDbTable()->fetchAll($select);                                   
  11.         if (0 == count($resultSet)) {
  12.             return;
  13.         }      
  14.         $row = $resultSet->current();
  15.         $pacientes->setRut($row->rut);
  16.         $pacientes->setNombres($row->nombre);*/
  17.        
  18.        return $this->getDbTable()->fetchAll($select);
  19.     }

No me funciona.

Última edición por Fenris; 02/02/2011 a las 10:45
  #9 (permalink)  
Antiguo 02/02/2011, 11:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 271
Antigüedad: 15 años, 8 meses
Puntos: 2
Respuesta: [problema] ZF y AJAX

Hola masterpuppet

FUNCIONO!!!!!!!!!!!!!!!!! POR FIN

GRACIAS POR LA AYUDA masterpuppet TE HAS PASADO MAESTRO.

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:21.