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
<script type="text/javascript"> function cargarVersiones(){ var opcionSeleccionada=$("#proyecto").val(); var selectDestino=$('#version'); $.ajax( { async: true, type: 'POST', url: '/memorias/memorias/ajax', data: "idproyecto="+opcionSeleccionada, dataType: 'json', beforeSend: function(data){ selectDestino.html('<label>Cargando...</label>'); }, success: function(data){ selectDestino.append( $('<option></option>').val(data.id).html(data.version) ); }, error: function(requestData, strError, strTipoError){ } }); } </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
function ajaxAction(){ $this->_helper->viewRenderer->setNoRender(); $this->_helper->layout->disableLayout(); if (!$this->getRequest()->isXmlHttpRequest()) { $this->_redirect('/buscador/buscador'); } $tablaVersiones= new Proyectos_Model_DbTable_Versions(); $id = $_POST["idproyecto"]; //datos de prueba para enviar al select $jsondata['id'] = 1; $jsondata['version'] = "versionprueba"; echo Zend_Json::encode($jsondata); }
Formulario Zend:
Código PHP:
Ver original
public function __construct(){ parent::__construct($options); $this->setAttrib('enctype', 'multipart/form-data'); $this->setName('nuevaMemoriaForm'); $this->setAction('subirmemoria'); $this->setMethod('post'); $file=new Zend_Form_Element_File('archivo'); $file->setLabel('Subir: '); $file->setRequired(true); $file->setDestination(UPLOAD_PATH); $file->addValidator('Count',false,1); $file->addValidator('Extension',false,'tmx'); $this->addElement($file); $proyectos= new Zend_Form_Element_Select('proyecto'); $proyectos->setLabel('Proyecto: '); $proyectos->setRequired(true); $proyectos->setAttrib('onChange', 'cargarVersiones();'); $auth=Zend_Auth::getInstance(); $data = $auth->getStorage()->read(); $tablaProyectos= new Proyectos_Model_DbTable_Projects(); $proyectos->addMultiOption(NULL,'Elija un proyecto'); //Lee los proyectos de la BBDD segun el usuario foreach ($tablaProyectos->getListaProyectosPorIdUsuario($data['user_id']) as $p) { $proyectos->addMultiOption($p->project_id, $p->project_name); } $this->addElement($proyectos); $versiones= new Zend_Form_Element_Select('version'); $versiones->setLabel('Version: '); $versiones->setRequired(true); $versiones->clearValidators(); $tablaVersiones= new Proyectos_Model_DbTable_Versions(); $versiones->addMultiOption(NULL,'Elija una version'); $this->addElement($versiones); }
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.