Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/06/2011, 13:02
castrovega7
 
Fecha de Ingreso: junio-2011
Mensajes: 51
Antigüedad: 12 años, 10 meses
Puntos: 3
Selects dependientes y posterior envío de formulario

Hola amigos, soy nuevo en el foro como podéis ver y también soy nuevo en el uso de Zend_Framework. Estoy desarrollando un proyecto en el cual tengo un formulario con 2 selects dependientes, es decir, según la opción seleccionada en el primer select, los datos del segundo select varían; y esto lo hago mediante JQuery y Ajax; en mi caso concreto en el primer select podremos elegir un proyecto y en base al proyecto seleccionado se cargarán las versiones de dicho proyecto.

He conseguido que la petición ajax se realice correctamente (gracias en gran medida a este post [URL="http://www.forosdelweb.com/f18/zend-selects-dependientes-847640/"]http://www.forosdelweb.com/f18/zend-selects-dependientes-847640/[/URL]) y consigo cargar los datos traídos desde la base de datos mediante AJAX, pero el problema que tengo es al enviar el formulario, ya que cuando hago el submit de dicho form, me salta el siguiente error:

- No se ha encontrado '1' en el argumento especificado

siendo '1' el valor del option seleccionado en el select.

Entonces lo que no comprendo es que los datos recogidos con AJAX los veo en pantalla, pero a la hora de enviar el form es como si Zend_Form no fuera consciente de estos nuevos datos y me gustaría saber vuestra opinión al respecto, o si estoy haciendo algo mal, os adjunto el código:

Script con la llamada ajax(Este script lo tengo situado en el layout, no se si podrá influir):
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.             function cargarVersiones(){
  3.  
  4.                 var opcionSeleccionada=$("#proyecto").val();
  5.                 var selectDestino=$('#version');
  6.                 $.ajax(
  7.                     {
  8.                         async: true,
  9.                         type: 'POST',
  10.                         url: '/memorias/memorias/ajax',
  11.                         data: "idproyecto="+opcionSeleccionada,
  12.                         dataType: 'json',
  13.                        
  14.                         beforeSend: function(data){
  15.                             selectDestino.html('<label>Cargando...</label>');
  16.                         },
  17.                         success: function(data){
  18.                             selectDestino.append(
  19.                                 $('<option></option>').val(data.id).html(data.version)
  20.                             );
  21.                         },
  22.                         error: function(requestData, strError, strTipoError){
  23.                            
  24.                         }
  25.                     });
  26.                 }
  27.         </script>

Función que selecciona los elementos para el select de versiones de BBDD situada en el controlador correspondiente(En este caso no estoy accediendo a BBDD simplemente devuelvo dos valores de prueba para hacerlo mas simple)
Código PHP:
Ver original
  1. function ajaxAction(){
  2.            
  3.             $this->_helper->viewRenderer->setNoRender();
  4.             $this->_helper->layout->disableLayout();
  5.             if (!$this->getRequest()->isXmlHttpRequest())
  6.             {
  7.                 $this->_redirect('/buscador/buscador');
  8.             }
  9.                 $tablaVersiones= new Proyectos_Model_DbTable_Versions();
  10.  
  11.                 $id = $_POST["idproyecto"];
  12.                 //datos de prueba para enviar al select
  13.                 $jsondata['id'] = 1;
  14.                 $jsondata['version'] = "versionprueba";
  15.  
  16.                 echo Zend_Json::encode($jsondata);
  17.  
  18.         }

Formulario Zend:
Código PHP:
Ver original
  1. public function __construct(){
  2.  
  3.         parent::__construct($options);
  4.  
  5.         $this->setAttrib('enctype', 'multipart/form-data');
  6.         $this->setName('nuevaMemoriaForm');
  7.         $this->setAction('subirmemoria');
  8.         $this->setMethod('post');
  9.  
  10.         $file=new Zend_Form_Element_File('archivo');
  11.         $file->setLabel('Subir: ');
  12.         $file->setRequired(true);
  13.         $file->setDestination(UPLOAD_PATH);
  14.         $file->addValidator('Count',false,1);
  15.         $file->addValidator('Extension',false,'tmx');
  16.         $this->addElement($file);
  17.        
  18.        
  19.         $proyectos= new Zend_Form_Element_Select('proyecto');
  20.         $proyectos->setLabel('Proyecto: ');
  21.         $proyectos->setRequired(true);
  22.         $proyectos->setAttrib('onChange', 'cargarVersiones();');
  23.  
  24.         $auth=Zend_Auth::getInstance();
  25.         $data = $auth->getStorage()->read();
  26.         $tablaProyectos= new Proyectos_Model_DbTable_Projects();
  27.        
  28.         $proyectos->addMultiOption(NULL,'Elija un proyecto');
  29.         //Lee los proyectos de la BBDD segun el usuario
  30.         foreach ($tablaProyectos->getListaProyectosPorIdUsuario($data['user_id']) as $p) {
  31.             $proyectos->addMultiOption($p->project_id, $p->project_name);
  32.         }
  33.  
  34.         $this->addElement($proyectos);
  35.  
  36.  
  37.         $versiones= new Zend_Form_Element_Select('version');
  38.         $versiones->setLabel('Version: ');
  39.         $versiones->setRequired(true);
  40.         $versiones->clearValidators();
  41.  
  42.         $tablaVersiones= new Proyectos_Model_DbTable_Versions();
  43.  
  44.         $versiones->addMultiOption(NULL,'Elija una version');
  45.  
  46.         $this->addElement($versiones);
  47.  
  48.         $this->addElement('submit','submit',array('label'=>'Subir memoria'));
  49.    
  50.     }

He probado a dentro del mismo script, una vez realizado el append de los nuevos datos al form, a acceder a estos datos desde javascript y lo he conseguido, es decir el value del option es accesible, por eso pregunto si será algo relacionado con que Zend_Form no tiene constancia de estos nuevos datos y por eso da el error.

Gracias de antemano, un saludo.

Última edición por castrovega7; 16/06/2011 a las 13:14