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

[SOLUCIONADO] Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Estas en el tema de [SOLUCIONADO] Ajax se comporta de forma ilógica, ¿se habrá vuelto loco? en el foro de Frameworks JS en Foros del Web. Tengo el siguiente código PHP Código PHP: while ( $row  =  mysql_fetch_array ( $result ,  MYSQL_ASSOC )) {          echo  "<tr>             <td style='display:none;'>" . $row [ 'idMedio' ...
  #1 (permalink)  
Antiguo 03/07/2009, 07:55
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
[SOLUCIONADO] Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Tengo el siguiente código PHP

Código PHP:
while ($row mysql_fetch_array($resultMYSQL_ASSOC))
{
    
    echo 
"<tr>
            <td style='display:none;'>"
.$row['idMedio']."</td>
            <td align='center'><img src='"
.$row['imagen']."'/></td>
            <td><a href='verPdf.php?idMedio="
.$row['idMedio']."' target='_blank' style='border:0'><span class='textoNormal'>Ver PDF</span><img src='images/reader.jpg' border='0'/></a></td>
            <td><div class='textoNormal' id=div"
.$row['idMedio']."></div></td>
            <td><div class='textoNormal' id="
.$row['nombre']."><input type='checkbox' id='num".$indice."' name='num".$indice."' onclick='seleccionado(".$indice.",".$NroRegistros.",".$row['idMedio'].")'/></div></td>
        </tr>"
;
    echo
"<tr><td colspan='5'><script type='text/javascript'> calcularCoste(".$row['idMedio'].",".$row[$diaSemana].");</script></td></tr>";

    
$indice++;

El código de calcularCoste es el siguiente:

Código:
function calcularCoste(idMedio,diaSemana){
 //donde se mostrará los registros
 textoDiv = 'div'+idMedio;
 divContenido = document.getElementById(textoDiv);
 
 ajax=objetoAjaxPaginar();
 //uso del medoto GET
 //indicamos el archivo que realizará el proceso de paginar
 //junto con un valor que representa el nro de pagina
 ajax.open("GET", "obtenerPrecio.php?idMedio="+idMedio+"&diaSemana="+diaSemana);
 divContenido.innerHTML= '<img src="images/loading.gif">';
 ajax.onreadystatechange=function() {
 if (ajax.readyState==4) {
   divContenido.innerHTML = ajax.responseText;
 	}
 }
 //como hacemos uso del metodo GET
 //colocamos null ya que enviamos 
 //el valor por la url ?pag=nropagina
 ajax.send(null)
}
Pues bien, el mismo se ejecuta dos veces, en la primera, no es capaz de mostrar el coste correctamente (con Firebug en cambio la respuesta que me dice que obtiene es correcta) y se queda "pillado" mostrando el .gif mientras que en la segunda iteración me muestra perfectamente el coste!!! ¿alguien sabe porqué? Muchísimas gracias.

Última edición por TobyMudito; 03/07/2009 a las 13:45
  #2 (permalink)  
Antiguo 03/07/2009, 08:11
Avatar de anf
anf
 
Fecha de Ingreso: junio-2009
Mensajes: 30
Antigüedad: 15 años, 5 meses
Puntos: 4
Respuesta: Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Creo que le falta el Status 200

if (http.readyState == 4) {
if (http.status == 200) {
bla bla bla
}
}

Saludos.
  #3 (permalink)  
Antiguo 03/07/2009, 08:15
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

He probado lo que me comentas y sigue pasando lo mismo, parece que esa no es la solución al problema, no obstante muchas gracias.
  #4 (permalink)  
Antiguo 03/07/2009, 09:17
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Que interesante, resulta que si con el Firebug voy depurando el código paso a paso, entonces si que me muestra los campos correctamente tanto en la primera como en la segunda iteración.

Es como si en la primera iteración, el resultado del GET no llegara a tiempo y ya se quedara el .gif sin poder hacer nada al respecto...

Es tan raro...

Alg
  #5 (permalink)  
Antiguo 03/07/2009, 10:16
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Os aporto mas información: He aumentado el número de registros de la consulta, y tan sólo me muestra correctamente el resultado en la última iteración, en el resto se queda pillado mostrando el gif
  #6 (permalink)  
Antiguo 03/07/2009, 13:26
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [Sin solucionar] Ajax se comporta de forma ilógica, ¿se habrá vuelto loco?

Gracias a un compañero de otro subforo he conseguido que se vean correctamente todos los enlaces sólo en IExplorer añadiendo el parámetro false al método open, pero en el caso de Mozilla sigue fallando. ¿Alguna idea?
  #7 (permalink)  
Antiguo 03/07/2009, 13:37
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 8 meses
Puntos: 839
Respuesta: [sin solucionar en Firefox] Ajax se comporta de forma ilógica, ¿se habrá v

Cuando haces una petición síncrona, ya no necesitas capturar el evento onreadystatechange.

Puedes colocar:
Código javascript:
Ver original
  1. divContenido.innerHTML = ajax.responseText;
Directamente después de la línea en que llamas al método send()
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 03/07/2009, 13:44
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: [sin solucionar en Firefox] Ajax se comporta de forma ilógica, ¿se habrá v

Bien!!! por fin!!! funcionó correctamente, muchísimas gracias David, en serio, bufff, sólo había que hacerlo síncrono....

Muchas gracias una vez mas
  #9 (permalink)  
Antiguo 03/07/2009, 13:57
 
Fecha de Ingreso: junio-2009
Mensajes: 128
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: [sin solucionar en Firefox] Ajax se comporta de forma ilógica, ¿se habrá v

Modifica ésta linea agregándole:
Código PHP:
 ajax.open("GET""obtenerPrecio.php?idMedio="+idMedio+"&diaSemana="+diaSemanafalse); 

y al final agregale el false tambien:


Código PHP:
 ajax2.send(null);   
       return 
false
Cuéntame si te funciona

Saludos
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 19:42.