AJAX - ComboBox relacionados

 
Vista:

ComboBox relacionados

Publicado por German (3 intervenciones) el 13/02/2007 20:38:23
Buenos dias

Mi consulta es la siguiente

Tengo una pagina cliente que posee tres combobox el primero relacionado con el segundo y el segundo con el tercero. Cree el codigo pero el problema es el siguiente, el codigo se ejecuta una sola vez, en otras palabras si selecciono el primer combo se llena el segundo, pero si lo selecciono otra ves, me aparece un error informando que "objetus is not a function"
A continuacion le agrego el codigo que hice

Cliente.html

<html>
<head>
<script language="javascript" type="text/javascript">
//funcion encargada de crear el objeto
function objetus() {
try {
objetus = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
objetus= new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
objetus= false;
}
}
if (!objetus && typeof XMLHttpRequest!='undefined') {
objetus = new XMLHttpRequest();
}
return objetus
}
//la funcion que hará el trabajo sucio
//esta funcion es la que llamamos en el evento ONCLICK de nuestro boton
function primer_tope(campo)
{
//creamos el objeto
_objetus=objetus(); //AQUI ME APARECE EL ERROR LA SEGUNDA VEZ Q EJECUTO
//cargamos una varible con las variables que vamos a enviar
_values_send="funcion="+campo;
_URL_="procesador.php?"
_objetus.open("GET",_URL_+"&"+_values_send,true);
//una vez enviado los valores inmediatamente llamamos a la propiedad
//onreadystatechange
_objetus.onreadystatechange=function() {
//dentro de la funcion comprobamos el estado del proceso
//si es 4 (terminado) pedimos lo que nos han mandado
if (_objetus.readyState==4)
{
if (_objetus.readyState==4)
{
//usamos la propiedad responseText para recibir en una cadena
//lo que nos mandaron
if (campo == 1) {
target="nuestrodiv_id2"
}else{
target="nuestrodiv_id3"
}
//agrego en el option el valor traido del servidor
//el valor options[0] es el indice del option comenzando de cero

document.getElementById(target).options[0].text=objetus.responseText;

}
}
}

_objetus.send(null);
}
</script>


<select size="1" name="Name" id="nuestrodiv_id1" onChange="primer_tope(1);">
<option value="value1">Item1</option>
<option value="value1">Item2</option>

</select>

<select size="1" name="Name" id="nuestrodiv_id2" onChange="primer_tope(2);">
<option value="value1">Item2</option>
<option value="value1">Item3</option>

</select>

<!-- <input name="Name" type="text" value="" id="nuestrodiv_id2">-->


<SELECT NAME="Name" id="nuestrodiv_id3">
<OPTION VALUE="value1">valor3
<OPTION VALUE="value1">valor4
</SELECT>

</body>

</html>

procesador.php

<?php
if(isset($_GET['funcion']))
{
$_valor=$_GET['funcion'];
if($_valor=="1")
{
$_pt= "German Olivera";

}
else
{
$_pt= "Olivera";
}
echo $_pt;
}
else
{
echo "No se a enviado valor alguno de peticion";
}
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ComboBox relacionados

Publicado por Gonzalo (26 intervenciones) el 14/02/2007 09:53:05
Tu problema es que no usas bien los nombres de las variables. Nunca hagas cosas como usar una variable llamada e y otra llamada E, por ejemplo.

En concreto, dentro de tu función objetus estás usando objetus como variable...

function objetus() {
····objetus = ...
····...
····return objetus;
}

No hagas eso (*). Usa otro nombre, y mejor si usas uno que tenga significado.

function adquirirObjetoXHR() {
····var xhr = ...;
····...
····return xhr;
}

function adquirirObjetoXHR() {
····var objetoDevuelto = ...;
····...
····return objetoDevuelto;
}


(*) ¿Por qué? Porque la segunda vez que lo hagas, objetus ya no será la función objetus, sino que será lo que le asignaste.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 30
Ha mantenido su posición en AJAX (en relación al último mes)
Gráfica de AJAX

RE:ComboBox relacionados

Publicado por Yamil Bracho (184 intervenciones) el 14/02/2007 13:08:17
Para que no tengas tanto problema codificando tu las plomeria de AJAX te recomiendo Prototype...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar