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

Una funcion que vale para todo...

Estas en el tema de Una funcion que vale para todo... en el foro de Frameworks JS en Foros del Web. Bueno, tengo una función, la clasica para actualizar un div con nueva info traida del servidor. El caso es que funciona pero la quiero ir ...
  #1 (permalink)  
Antiguo 14/11/2007, 14:52
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
De acuerdo Una funcion que vale para todo...

Bueno, tengo una función, la clasica para actualizar un div con nueva info traida del servidor.

El caso es que funciona pero la quiero ir mejorando y he ido añadiendo variables.
primero solo enviaba una variable a la pagina del servidor (que hace una busqueda en base de datos, luego modifique el script para poder pasarle el nombre del fichero y que no siempre cargue el mismo php del servidor, sino según yo quiera y lo ultimo (y me trae loco) es pasarle el nombre del DIV que quiero que actualice con la respuesta del servidor.... y NO HAY FORMA. Os pego el codigo por si me podeis echar una mano.

el fichero .js queda así


var xmlHttp
function muestralo(str,url)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("El navegador no soporta funciones AJAX de HTTP Request")
return
}
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("Abajo").innerHTML=xmlHttp .responseText
}else{
document.getElementById("Abajo").innerHTML='Cargan do...<img src="carga.gif" border=0>';

}

}
function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
//Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}


ese era el codigo del .js y llamo desde php con una linea asi:

echo "<select name='sect' id='sect' onChange='muestralo(this.value,\"cuadro.php\")'>";

Este codigo funciona perfectamente pero siempre devuelve los resultados en una capa llamada Abajo

Yo quisiera algo así:
echo "<select name='sect' id='sect' onChange='muestralo(this.value,\"cuadro.php\",\"El _DIV_que_sea\")'>";

Y con ello elegir en que div me devuelve la información extraida del servidor.

Espero haberme explicado

Gracias
  #2 (permalink)  
Antiguo 14/11/2007, 22:34
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Re: Una funcion que vale para todo...

no se si te habra pasado por la mente... pero

al hacer el procedimiento (en mi caso), mando dentro de la peticion el div en donde quiero la respuesta

algo asi, en tu codigo:
Cita:
function muestralo(str,url,en)
{
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
{
alert ("El navegador no soporta funciones AJAX de HTTP Request")
return
}
url=url+"?q="+str+"&idc="+en
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}
recojo el valor de idc, lo separo del proceso, y en respuesta lo mando al principio separado con un simbolo " * / - _ |", algo que te sirva de separacion al recibir la respuesta, haciendo esto:

Cita:
function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("temp").innerHTML="";
document.getElementById("temp").visible="none";
respuesta=split(xmlHttp .responseText,simbolo)
document.getElementById(respuesta[0]).innerHTML=respuesta[1]
}else{
/*
en esta parte utilizaria un div temporal, que estuviera encima de todo mientras se carga la respuesta,
*/
document.getElementById("temp").display="visible";
document.getElementById("temp").innerHTML='Cargan do...<img src="carga.gif" border=0>';

}
lo que esta en rojo seria anexo, de un div temporal con z-order=10, para que aparesca encima de todo tu codigo mientras se carga la informacion, una vez hecho se ocultaria

una idea, ojala pueda servirte a tu proposito
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 15/11/2007, 10:43
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: Una funcion que vale para todo...

Creo que capto la idea, pero no entiendo muy bien lo de la capa temporal.

No se cual es su misión. Aclaro un poco más por si va por ahi los tiros....
El id de la capa que quiero pasar al llamar a la función, existe, es decir no es que quiera crear en tiempo real la capa que me de la gana, sino lo que quiero es poder usar esa misma función para actualizar cualquier capa que me de la gana pero que ya existiese previamente y es más que ya tuviese contenido y estuviese visible, Digamos que quiero conseguir una funcion ajax flexible para pasarle un valor que haga de filtro, el nombre de un fichero del servidor que ha de ejecutar con ese valor mencionado y pasarle el id de la capa donde quiero que ponga el resultado (pero de capas existentes). No se si eso da un vuelco a tu sugerencia o sigue siendo necesario esa capa temporal....

Gracias, sobre todo por el esfuerzo de contestar. muchas gracias... porque estoy atascado y seguro que es una tontería.
  #4 (permalink)  
Antiguo 15/11/2007, 10:52
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Re: Una funcion que vale para todo...

creo que no explique bien el uso de la DIV TEMP, el objetivo de esta seria informarle al usuario que se esta ejecutando la accion

fijate como en hotmail, ahora con el nuevo correo, en la parte inferior izquierda de la pantalla, aparece un pequeño div anarajado que dice "PROCESANDO...", seria una similitud

para que el usuario de tu pagina sepa que si se esta realizando lo que solicito

__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #5 (permalink)  
Antiguo 15/11/2007, 11:21
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: Una funcion que vale para todo...

ah, ya

Pero eso ya lo hace el codigo original, fijate que si se completa la respuesta del servidor (readyState==4) pongo el texto devuelto pero mientras no sea así, sea cual sea el estado (excepto =4) le pongo el texto de cargando... y un gif animado

Eso valdría supongo....

Voy a probar sin esa parte, para ver lo del simbolo si me funciona, entiendo que donde pone simbolo pongo directamente | o * o lo que sea.... ¿no?

gracias
  #6 (permalink)  
Antiguo 15/11/2007, 11:28
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 2 meses
Puntos: 88
Re: Una funcion que vale para todo...

asi es, tu escribes el que ocupes para mejor funcionalidad, en las pruebas que he hecho, he utilizado el *, y me va bien
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #7 (permalink)  
Antiguo 15/11/2007, 11:31
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: Una funcion que vale para todo...

pues no me funciona ... sigo probando...
  #8 (permalink)  
Antiguo 15/11/2007, 11:32
Avatar de intergus  
Fecha de Ingreso: mayo-2007
Mensajes: 126
Antigüedad: 17 años
Puntos: 3
Re: Una funcion que vale para todo...

En el php no hay que tocar nada..... todo es en el .js
ummmmm no se que pasa....
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 09:44.