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

perdiendo horas gracias a explorer

Estas en el tema de perdiendo horas gracias a explorer en el foro de Frameworks JS en Foros del Web. Hola gente una vez más en el navegador Iexplorer 7 no me funciona un sencillo scipt hecho con Ajax (javascript + php) me funciona perfecto ...
  #1 (permalink)  
Antiguo 25/02/2009, 01:31
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
perdiendo horas gracias a explorer

Hola gente una vez más en el navegador Iexplorer 7 no me funciona un sencillo scipt hecho con Ajax (javascript + php) me funciona perfecto con mozilla y no me funciona con explorer, el tema es que he validado mi código Xhtml y el Css y para mi sorpresa aún estando validado no funciona con IE7.

Voy a pegar algo de código (no todo sino sería una locura) que basicamente se divide en 3 partes.

NOTA:TODO ESTO FUNCIONA PERFECTAMENTE CON MOZILLA , el problema es con IE7 , he buscado en google posibles soluciones pero no he encontrado nada.

1 página donde se muestran los resultados en una capa y se hace la llamada a la función proceso() que es la que cambia el contenido de la capa según se pase el ratón por un lugar u otro de una mapa y de unos enlaces que tengo:

Código:
<div id="zonas" style="float:left; width:97px" align="left">
<p><a href="#" onmouseover="proceso(7);" >Tarragona</a></p>
<p><a href="#" onmouseover="proceso(3);" >Barcelona</a></p>
<p><a href="#" onmouseover="proceso(2);" >Sicilia</a></p>

 <div >

<div align="center" id="escaparate">
<div id="gallery" >
<div id="inicio" ><p>Seleccione zona del mapa</p></div>
<div id="texto" > </div>
<div id="images" align="left" > </div>
</div>
</div>
funciones Javascript

Código:
// JavaScript Document
function getXMLHTTPRequest() {
try {
req = new XMLHttpRequest();
} catch(err1) {
  try {
  req = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (err2) {
    try {
    req = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (err3) {
      req = false; 
    }
  }
}
return req;
} 
var http = getXMLHTTPRequest();

//recupera el CatId del botón del menú donde nos hemos posado
function proceso(CatId)
{
  // Procede s?lo si el objeto http no est? ocupado
  if (http.readyState == 4 || http.readyState == 0)
  {
    // recupera el nombre escrito por el usuario en el formulario
 //   name = encodeURIComponent(document.getElementById("myName").value);
    // ejecuta la p?gina inicio.php desde el servidor
//	  CatId = encodeURIComponent(CatId);

    http.open("GET", "operations/ajax/intro.php?CatId=" + CatId, true);  
    // define la funci?n para manejar las respuestas del servidor
    http.onreadystatechange = useHttpResponse;
    // haz la petici?n al servidor
    http.send(null);
  }
  else
    // si la conexi?n est? ocupada, prueba de nuevo despu?s de un segundo  
    setTimeout('proceso()', 1000);
}

// ejecutado autom?ticamente cuando un mensaje es recibido desde el servidor
function useHttpResponse() 
{
  // se ejecuta s?lo si la transacci?n se ha completado
  if (http.readyState == 4) 
  {
    // estatus de 200 indica que la transacci?n se ha completado correctamente
    if (http.status == 200) 
    {
      // extraemos el XML recuperado del servidor
      xmlResponse = http.responseXML;
      // obtenemos el "document element" (el elemento ra?z) de la estructura XML
      xmlDocumentElement = xmlResponse.documentElement;
      // obtenemso el mensaje de texto, que est? en el primer hijo de
	  // el "document element"
	  



  // contenido.innerHTML += xmlDoc.firstChild.getElementsByTagName('miembro')[i].getAttribute('idmiembro')+' - ';
     // contenido = xmlDocumentElement.firstChild
	 //http.responseXML.getElementsByTagName("timenow")[0];
	title=xmlDocumentElement.getElementsByTagName('name')[0].firstChild.data;
	   	texto=xmlDocumentElement.getElementsByTagName('text')[0].firstChild.data;
	   	imagenes=xmlDocumentElement.getElementsByTagName('imagenes')[0] ;
	  
      document.getElementById("inicio").innerHTML = 
                                            '<i>' +  title + '</i>';
		
		document.getElementById("texto").innerHTML = 
                                            '<i>' +  texto + '</i>';
											//añadimos las imágenes
			document.getElementById("images").innerHTML ="";
		for (i = 0; i < 3; i++){
			img=imagenes.getElementsByTagName('imagen')[i].firstChild.data;
 		document.getElementById("images").innerHTML +="<img src='images/zonas/thumbs/"+img+"'/>";
		} 
			//xmlDocumentElement.getElementsByTagName('imagen').firstChild.data					
											
			//document.getElementById("images").innerHTML = 
              //                              '<i>' +  imagen + '</i>';//añadimos las imágenes
		/* document.getElementById("img").innerHTML = 
                                            '<i>' +  imagen + '</i>';//añadimos las imágenes		 */					
      // reiniciar secuencia
      setTimeout('proceso(CatId)', 1000);
    } 
    // un estatus HTTP distinto de 200 indica que ha habido un error
    else 
    {
      alert("Ha habido un problema al acceder al servidor: " + http.statusText);
   }
  }
}

Por último el XML
Código:
<?
header('Content-Type: text/xml'); 

// generar? la salida XML
// genera el header XML
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';

// crea el elemento <response>
echo '<response>';

//otenemos los datos de la tabla index para mostrarlos en la portada
include("../../fns/db_fns.php");
db_connect() or die (mysql_error());

$CatId=$_GET['CatId'];
//$query="SELECT * FROM activate WHERE CodeAct='$Id'";
$consulta="SELECT * FROM intro WHERE ZoneId='".trim($CatId)."'";
//echo $consulta;
$images_query="SELECT Link FROM images WHERE Zone='".trim($CatId)."'";

$result=mysql_query($consulta)or die (mysql_error());

$images=mysql_query($images_query)or die (mysql_error());



//$res=db_result_to_array($result);
$res=mysql_fetch_array($result) or die (mysql_error());
$img=db_result_to_array($images) ;

  echo "<name>". utf8_encode($res['Name'])."</name>";
    echo "<text>".utf8_encode($res['Text'])."</text>";
	echo "<imagenes>";
    if (count($img)) {
	foreach ($img as $row){
   echo "<imagen>".trim($row['Link'])."</imagen>" ;
   }}
   echo "<imagen></imagen>";  
   echo "</imagenes>";
   
// cierra el elemento <response>
echo '</response>';


?>
Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 25/02/2009, 03:13
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: perdiendo horas gracias a explorer

Hola Dundee:

¡Uff!, con tantos comentarios se hace difícil la lectura... pero ya que no descubro el "poblema", te voy a decir algunas cosas que valen para encontrarlos.

Por ejemplo

setTimeout('proceso()', 1000);
y
setTimeout('proceso(CatId)', 1000);

Tienen una diferencia que deberías controlar... y si importa ese contenido, podrías chequear (en fase de pruebas y depuración) que le llega el valor adecuado, tal vez con una alerta...

Otra cosa que parece que no debe ser problema es algunos nombres de variables que pueden confundirse con objetos, como images... existe la colección document.images, que creo que no es igual incluso en explorer, pero en el caso de frames (y no sé si habrá más) existe indo.frames y document.frames (me refiero a explorer)... bueno, esto último no creo que sea necesario chequear porque creo que está bien...

Por cierto, ¿provoca algún error?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 25/02/2009, 05:23
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 10 meses
Puntos: 8
Respuesta: perdiendo horas gracias a explorer

Hola gracias por la ayuda , te cuento , el error que me tira es este (se me olvido ponerlo ), he buscado en google pero los resultados que obtuve no me sirvirieron para solucionar el problema.

linea:65
Carácter:2
Error:XmlDocumentElement es nulo o no es un objeto
Código:0

Por cierto he revisado esto de :
setTimeout('proceso()', 1000);
y
setTimeout('proceso(CatId)', 1000);


y le he añadido el CatId a ambas, es decir ambas son ahora setTimeout('proceso(CatId)', 1000);

He sustituido getElementById("images") por getElementById("img")

Un saludo

Última edición por Dundee; 25/02/2009 a las 05:35
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 11:19.