Foros del Web » Programando para Internet » Javascript » Frameworks JS »

No recibo nada al enviar el valor de un campo select generado con AJAX

Estas en el tema de No recibo nada al enviar el valor de un campo select generado con AJAX en el foro de Frameworks JS en Foros del Web. Tengo un formulario PHP que tienen dos selects. El segundo depende de lo que se se cargue en el primero, y este segundo select lo ...
  #1 (permalink)  
Antiguo 30/09/2008, 10:48
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
No recibo nada al enviar el valor de un campo select generado con AJAX

Tengo un formulario PHP que tienen dos selects. El segundo depende de lo que se se cargue en el primero, y este segundo select lo cargo con AJAX.

Hasta aquí todo perfecto, pero el problema está en que, cuando envío el formulario por el método POST me llegan todas la variables excepto el valor select generado con AJAX.

Alguien puede echarme una mano?.

Muchas gracias.
  #2 (permalink)  
Antiguo 30/09/2008, 14:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Hola mgomezbuceta,

¿Como es que generas el segundo select? Si nos muestras un poco de codigo es más fácil que te podamos ayudar.

Saludos.
  #3 (permalink)  
Antiguo 01/10/2008, 01:27
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

soporte_hardware.php (omito el lenguaje html):

<form name="formulario_rma" action="index.php?carga=rma_registrado" method="post" onSubmit="return validar()"/>
<input type="hidden" name="id_cliente" value="<?php echo($id_cliente); ?>">

<select name="tipo" onChange="generar_select(document.formulario_rma.t ipo.options[document.formulario_rma.tipo.selectedIndex].value)">
<option value="999" selected="selected">Seleccione el producto</option>
<?php
require("conexion.php");
$sql_tipo='SELECT * FROM tipo_rma order by id_tipo';
$consulta_tipo = mysql_query($sql_tipo,$conexion) or die(mysql_error());

while ($tipo=mysql_fetch_assoc($consulta_tipo))
{
echo '<option value="'.$tipo['id_tipo'].'">'.$tipo['nombre_tipo'].'</option>';
}
?>
</select>
<div id="select2">
<select size="1" name="modelo" tabindex="8">
<option value="0" selected="selected">Seleccione el tipo</option>
</select>
</div>
</form>


cargar_rma.js

function generar_select(id_tipo)
{
var contenedor;

ajax=nuevoAjax();
contenedor=document.getElementById('select2');

if (id_tipo==999)
{
nuevo_select="<select name='modelo'><option value='0'>Elegir tipo</option></select>";
}else
{
ajax.open("GET", "respuesta_rma.php?id_tipo="+id_tipo, true);
}
//escribimos en la capa con id="seleccombinado"
ajax.onreadystatechange=function(){if (ajax.readyState==4) {contenedor.innerHTML = ajax.responseText;}}
ajax.send(null)
}


respuesta_rma.php

<?php
$id_tipo = $_GET["id_tipo"];
function select_combinado($id_tipo){

require("conexion.php");

$sql_rma='SELECT id_modelo, nombre_modelo FROM modelo_rma WHERE id_tipo_enlace='.$id_tipo;
$consulta_rma = mysql_query($sql_rma,$conexion) or die(mysql_error());

$nuevo_select='<select size="1" name="modelo" tabindex="8">';

while($rma=mysql_fetch_assoc($consulta_rma))
{
$nuevo_select.='<option value="'.$rma['nombre_modelo'].'" >'.$rma['nombre_modelo'].'</option>';
}

// Liberar memoria usada por consulta.
mysql_free_result($consulta_rma);
$nuevo_select.='</select>';

return $nuevo_select;
}
echo (select_combinado($id_tipo));

?>

Aquí están los códigos del archivo principal donde cargo los select, del archivo javascript que gestiona el ajax, y del archivo php que utiliza el propio ajax.

El problema es que el select generado con ajax no se envía por el método POST, ni por el GET. Es como si ahí no hubiera nada
  #4 (permalink)  
Antiguo 01/10/2008, 09:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

¿Como rescatas el valor posteriormente en tu formulario?

Saludos.
  #5 (permalink)  
Antiguo 01/10/2008, 10:04
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Si te refieres al valor que se enviaría: $_POST['tipo'].
Así lo hago con el primer select y me funciona.

Tengo que pedir disculpas porque con AJAX no me manejo muy bien.

Gracias.
  #6 (permalink)  
Antiguo 01/10/2008, 10:11
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

¿Para el segundo como tratas de rescatarlo?

Saludos.
  #7 (permalink)  
Antiguo 02/10/2008, 14:34
Avatar de foreverOdd  
Fecha de Ingreso: noviembre-2007
Ubicación: Caracas
Mensajes: 489
Antigüedad: 16 años, 5 meses
Puntos: 14
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Quiza esl problema sea que estas esperando el valor de "select2" cuando este no es mas que un div el cual no se envia con el formulario,
contenedor=document.getElementById('select2');

el combo o lista desplegable lo estas nombrando

<select size="1" name="modelo" tabindex="8">

y es por el por quien tienes que preguntar en el POST, es decir:

$combo = $_POST["modelo"];
__________________
My path is lit by my own fire, I only go where I desire
  #8 (permalink)  
Antiguo 03/10/2008, 01:22
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Muchas gracias por tu respuesta foreverOdd, pero eso es precisamente lo que hago y no me envía nada, probé con el método GET para ver en la URL lo que se envía y el campo "modelo" no aparece.

Alguna idea?

Muchas gracias.
  #9 (permalink)  
Antiguo 03/10/2008, 01:42
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

"modelo" no aparece porque el objeto del DOM que realmente pertenecía al formulario lo has destruido al reescribir por completo el contenido del <div id="contenedor">.

En lugar de eso, lo que deberías hacer es una de estas dos cosas:
  • Reescribir únicamente el contenido del <select>. Es decir, únicamente los <option>s.
  • Devolver sólo los valores (i.e. sin HTML) en respuesta_rma.php, procesarlos en la función que trata la respuesta y construir uno a uno los objetos Option(texto,valor) y añadírselos al <select>

Yo me inclinaría por la segunda.
  #10 (permalink)  
Antiguo 03/10/2008, 01:49
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Muchas gracias venkman, voy a probar las soluciones, aunque la segunda no tengo muy claro como hacerla.


Muchas gracias.
  #11 (permalink)  
Antiguo 03/10/2008, 05:37
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Venkman, soy un poco principiante en esto.

Me podrías echar una mano con la segunda solución y explicarme como hacerlo.

Te lo agradecería.

Muchas gracias.
  #12 (permalink)  
Antiguo 03/10/2008, 08:07
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Puedes buscar por los foros cómo cargar un combo, cómo cargar un select, como hacer new Option... No lo digo porque no quiera contestarte, sino porque hay bastantes temas que tratan ya sobre eso.
  #13 (permalink)  
Antiguo 03/10/2008, 09:10
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Muchas gracias, pero ya se como se carga el select y he buscado y todos ponen lo mismo, con lo cual te preguntaba a ti por si sabías como hacerlo.

De todas formas muchísimas gracias.
  #14 (permalink)  
Antiguo 03/10/2008, 09:48
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Supongamos que respuesta_rma.php en lugar de devolver lo que tienes ahora, devuelve algo como:
Código PHP:
<?php
$id_tipo 
$_GET["id_tipo"];
function 
select_combinado($id_tipo){

    require(
"conexion.php");

    
$sql_rma='SELECT id_modelo, nombre_modelo FROM modelo_rma WHERE id_tipo_enlace='.$id_tipo;
    
$consulta_rma mysql_query($sql_rma,$conexion) or die(mysql_error());

    
$nuevo_select='';

    while(
$rma=mysql_fetch_assoc($consulta_rma)) {
        
$nuevo_select .= $rma['nombre_modelo'].'/';
    }
    
mysql_free_result($consulta_rma);
    
$nuevo_select=substr($nuevo_select,0,-1);
    return 
$nuevo_select;
}
echo (
select_combinado($id_tipo));
?>
Eso hace que el ajax.responseText sea algo como "uno/otro/otro más". Así que en el onreadystatechange, lo que haces es usar eso para construir objetos Option y meterlos en el select.

Código javascript:
Ver original
  1. //...
  2. ajax.onreadystatechange = function(){
  3.     if (ajax.readyState==4) {
  4.         array_de_modelos = ajax.responseText.split("/");
  5.         modeloSelectOptions = document.getElementById("modelo").options;
  6.         for (var i= 0;i<array_de_modelos.length; i++) {
  7.             modeloSelectOptions[modeloSelectOptions.length] = new Option(array_de_modelos[i]);
  8.         }
  9.     }
  10. }
  11. //...

Eso suponiendo que al <select size="1" name="modelo" tabindex="8"> le pones un id="modelo", claro. Y que revisas el código porque lo he escrito así sin pensar y podría tener errores.

Última edición por venkman; 03/10/2008 a las 09:53
  #15 (permalink)  
Antiguo 06/10/2008, 09:07
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Muchísimas gracias Venkman.

Ahora mismo lo pruebo y te cuento.

Mil gracias.
  #16 (permalink)  
Antiguo 07/10/2008, 01:23
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Muchísimas gracias venkman.

Funcionó a las mil maravillas.
  #17 (permalink)  
Antiguo 07/10/2008, 03:31
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Un pequeño problemilla.

Cuando selecciono el tipo me muestra los distinto modelos. Hasta aquí todo bien, el problema está en que si selecciono otro tipo, en vez de cargarme lo modelos correspondientes, me carga los modelos del tipo antes seleccionado y los modelos del nuevo tipo, y así sucesivamente.

Se puede solucionar vaciando el "array_de_modelos" cada vez que lo llame el ajax?
  #18 (permalink)  
Antiguo 07/10/2008, 08:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Exacto lo que haces es truncar el select:
Código javascript:
Ver original
  1. //...
  2. ajax.onreadystatechange = function(){
  3.     if (ajax.readyState==4) {
  4.         array_de_modelos = ajax.responseText.split("/");
  5.         modeloSelectOptions = document.getElementById("modelo").options;
  6.         modeloSelectOptions.length = 0; // Esto es lo importante
  7.         for (var i= 0;i<array_de_modelos.length; i++) {
  8.               modeloSelectOptions[modeloSelectOptions.length] = new Option(array_de_modelos[i]);
  9.         }
  10.     }
  11. }
  12. //...

Saludos.
  #19 (permalink)  
Antiguo 07/10/2008, 09:07
Avatar de mgomezbuceta  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago de Compostela
Mensajes: 47
Antigüedad: 16 años
Puntos: 0
De acuerdo Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

Mil gracias a todos, porque AJAX es nuevo para mi.

Gracias.
  #20 (permalink)  
Antiguo 28/10/2008, 09:22
 
Fecha de Ingreso: septiembre-2008
Mensajes: 5
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: No recibo nada al enviar el valor de un campo select generado con AJAX

hola, yo tengo un problema parecido pero estoy utilizando xajax.
el problema es que yo tengo el siguiente codigo:
<?php
function validar_empresa($nombre_empresa){

$ssql="select left(nombre,80) as nombre from empresa where nombre like'%$nombre_empresa%' order by clave";
$result =mysql_query($ssql);
if (mysql_num_rows($result)==0){
$campo_emp="No se encontro ningun elemento";
}
else{
$campo_emp ="<select name='emp'>";
while($row = mysql_fetch_array($result)) {
$campo_emp .='<option value="'.$row[clave].'">'.$row[nombre].'</option>';
}
$campo_emp .="</select>";
}


$respuesta = new xajaxResponse('ISO-8859-1');
$respuesta->addAssign("busqueda_empresa","innerHTML",$campo_e mp);
return $respuesta;
}
?>

Esto se imprime en el formulario en la seccion <div id="busqueda_empresa"></div>
Hasta aqui todo funciona bien. El problema es que yo envio esto a otro archivo que recibe los valores del formulario, pero no logro recepcionar los valores del select impreso con ajax.
intento recuperar el valor con $_POST["emp"] para luego guardarlo en una base de datos pero no me guarda nada.
Les agradezco su ayuda!!!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:49.