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

Ajax funciona a medias

Estas en el tema de Ajax funciona a medias en el foro de Frameworks JS en Foros del Web. Hola a todos, les comento mi problema, tengo las siguientes funciones: Código HTML: function actualizar(viejo_precio,tipo){ var entrada="precio_"+tipo; var precio=document.getElementById(entrada).value; http.open("GET", "actualizar.php?precio="+precio+"&viejoprecio="+viejo_precio+"&tipo="+tipo, true); http.onreadystatechange = actualizado; ...
  #1 (permalink)  
Antiguo 02/01/2011, 22:53
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Ajax funciona a medias

Hola a todos, les comento mi problema, tengo las siguientes funciones:

Código HTML:
function actualizar(viejo_precio,tipo){
	var entrada="precio_"+tipo;
	var precio=document.getElementById(entrada).value;
  http.open("GET", "actualizar.php?precio="+precio+"&viejoprecio="+viejo_precio+"&tipo="+tipo, true);
  http.onreadystatechange = actualizado;
  http.send(null);
  actualizado(tipo);
}

function actualizado(tipo) {
   if (http.readyState == 4) {
    if(http.status == 200) {
      var miTexto = http.responseText;
      document.getElementById(tipo).innerHTML = "cambiado";
    }
  }
  	else {
		document.getElementById(tipo).innerHTML = "Actualizando...";
	} 
}
El asunto es que cuando la ejecuto, el dom:

document.getElementById(tipo).innerHTML = "Actualizando...";

se ejecuta perfectamente, pero el

document.getElementById(tipo).innerHTML = "cambia";

nunca aparece

algunos diran bueno lo que sucede es que readyState y status no se completan, pero lo cierto es que si, la funcion anda perfectamente salvo por este detalle de que el texto "Actualizando..." no cambia a "cambiado". Espero alguien sepa ayudarme. Gracias!!
  #2 (permalink)  
Antiguo 03/01/2011, 06:20
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Ajax funciona a medias

añadele a la función esta alerta y creo que verás cual es el problema
Cita:
function actualizado(tipo) {
alert(http.readyState)
if (http.readyState == 4) {
  #3 (permalink)  
Antiguo 03/01/2011, 06:54
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ajax funciona a medias

Cita:
Iniciado por IsaBelM Ver Mensaje
añadele a la función esta alerta y creo que verás cual es el problema
Hola Isabel!, muchisimas gracias por responder, te comento que he agegado elalert que mecomentas y misteriosamente empezo a funcionar perfectamente (solo que con las alertas), pero cuando quito el alert deja de funciona nuevamente, por otro lado te comento que soy tan bruto que no llego a darme cuenta de cual es el problema las ventanas de alerta que me mustra son: 1,2,3,4,1,4. Espero me puedas dar otra pista para poder llegar al problema. Saludos!
  #4 (permalink)  
Antiguo 03/01/2011, 07:54
Avatar de alfcm  
Fecha de Ingreso: mayo-2009
Mensajes: 291
Antigüedad: 14 años, 10 meses
Puntos: 7
Respuesta: Ajax funciona a medias

No sera q es muy rapido el proceso que no lo puedes ni ver por lo que sucede en menos de un segundo, porque si te muestra con el alert entonces esta OK
  #5 (permalink)  
Antiguo 03/01/2011, 15:03
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Ajax funciona a medias

1,2,3,4,1,4 estos son los estados que se levantan. como puedes entender los estados 1 y 4, que te he marcado en rojo, sobran. quita esta invocación actualizado(tipo); y usa funciones anónimas, algo como esto
Cita:
function actualizar(viejo_precio,tipo){
var idobjeto = tipo;
var entrada="precio_"+tipo;
var precio=document.getElementById(entrada).value;
http.open("GET", "actualizar.php?precio="+precio+"&viejoprecio="+vi ejo_precio+"&tipo="+tipo, true);
http.send(null);
http.onreadystatechange = function() {

if (http.readyState == 4) {
if(http.status == 200) {
var miTexto = http.responseText;
document.getElementById(idobjeto).innerHTML = "cambiado";
}
}
else {
document.getElementById(idobjeto).innerHTML = "Actualizando...";
}
}
}
  #6 (permalink)  
Antiguo 03/01/2011, 20:10
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ajax funciona a medias

Cita:
Iniciado por IsaBelM Ver Mensaje
1,2,3,4,1,4 estos son los estados que se levantan. como puedes entender los estados 1 y 4, que te he marcado en rojo, sobran. quita esta invocación actualizado(tipo); y usa funciones anónimas, algo como esto
Estimada Isabel, mil gracias por responder, he realizdo lo que me dices y funciono perfectamente!, solo un detalle, a traves de la variable "tipo", lo que paso es el id del div que deseo modificar (entre otras cosa que coincide con el mismo nombre), pero lo que sucede es que aparentemente queda pegado el primer id que le paso, por ej trabajo con la funcion "actualizar" en el id 1 y funciona perfectamente pero cuando me voy a trabajar al id 2 con la funcion "actualizar" me aparece en el id 1 la leyenda "Actualizando..." y se queda ahi, he podido descubrir de que esto se debe a que en:

Código HTML:
else {
document.getElementById(tipo).innerHTML = "Actualizando...";
	}
se queda pegada como contenido de la variable la primera que se paso que es enste caso seria el id 1, una solucion seria sacar el else y ahi funciona perfectamente si bien no muestra "Actualizando..." pero esto seria como atarlo con alambre y la verdad no me gusta. Espero me puedas orientar en que es lo que estoy haciendo mal. Saludos!!
  #7 (permalink)  
Antiguo 04/01/2011, 07:19
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Ajax funciona a medias

si has copiado el código tal y como te lo di, no debería de pasar lo que comentas. de cualquier modo, puedes intentar destruir el objeto http con el método abort()
  #8 (permalink)  
Antiguo 04/01/2011, 19:05
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Ajax funciona a medias

Cita:
Iniciado por IsaBelM Ver Mensaje
si has copiado el código tal y como te lo di, no debería de pasar lo que comentas. de cualquier modo, puedes intentar destruir el objeto http con el método abort()
Hola Ivana, te comento que he puesto el codigo tal como me has indicado, he probado con el metodo abort() pero no me ha funcionado, quizas mi explicacion no fue muy clara por lo que he grabado un videito que creo que explicamucho mejor cual es el problema:

http://www.4shared.com/video/zYZSXZz1/video.html

Saludos y gracias!
  #9 (permalink)  
Antiguo 05/01/2011, 07:08
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Ajax funciona a medias

es la primera vez que veo ese comportamiento. intenta usar firebug para ver el valor de las variables que envías, sobre todo el valor de la variable tipo. también puedes probar a añadirle a la url actualizar.php?precio="+precio+"&viejoprecio="+vie jo_precio+"&tipo="+tipo +"&r=" + Math.random(), para evitar recibir resultados de la caché, aunque no parece que sea el problema

Etiquetas: ajax, medias
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 00:45.