Ver Mensaje Individual
  #7 (permalink)  
Antiguo 29/03/2007, 06:12
Avatar de bichomen
bichomen
 
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 21 años, 6 meses
Puntos: 2
Re: function onLoad

Haber voy a intentar exponer el problema con todos los datos posibles, aunque ya tengo por los foros un par de temas preguntando mas o menos lo mismo, pero es que necesito solucionarlo.

Estoy utilizando ajax, para la carga de páginas, utilzo esta función en ajax.js:

Código HTML:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Cargar diferentes includes en una página:

var http_request = false;

function makeRequest(url)
{
	http_request = false;

	if (window.XMLHttpRequest) 
	{ // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) 
		{
			http_request.overrideMimeType("text/xml");
			// Ver nota sobre esta linea al final
		}
	}	
	else if (window.ActiveXObject) 
	{ // IE
		try 
			{
				http_request = new ActiveXObject("Msxml2.XMLHTTP");
			} 
		catch (e) 
		{
			try 
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) 
			{
			}
		}
	}

	if (!http_request) 
	{
		alert("ERROR :( No es posible crear una instancia XMLHTTP");
		return false;
	}
	http_request.onreadystatechange = alertContents;
	http_request.open("GET", url, true);
	http_request.send(null);

}

function alertContents() 
{

	if (http_request.readyState == 4) 
	{
		if (http_request.status == 200) 
		{
			alert(http_request.responseText);
		} 
		else 
		{
			alert("Hubo problemas con la petición.");
		}
	}

}

function XHConn()
{
	var xmlhttp, bComplete = false;
	try 
	{ 
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch (e) 
	{ 
		try 
		{ 
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		}
		catch (e) 
		{ 
			try 
			{ 
				xmlhttp = new XMLHttpRequest(); 
			}
			catch (e) 
			{ 
				xmlhttp = false; 
			}
		}
	}
	if (!xmlhttp) return null;
	this.connect = function(sURL, sMethod, sVars, fnDone)
	{
		if (!xmlhttp) return false;
		bComplete = false;
		sMethod = sMethod.toUpperCase();
			
		try 
		{
			if (sMethod == "GET")
			{
				xmlhttp.open(sMethod, sURL+"?"+sVars, true);
				sVars = "";
			}
			else
			{
				xmlhttp.open(sMethod, sURL, true);
				xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
				xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			}
				
			xmlhttp.onreadystatechange = function()
			{
				if (xmlhttp.readyState == 4 && !bComplete)
				{
					bComplete = true;
					fnDone(xmlhttp);
				}
			};
					
			xmlhttp.send(sVars);
		}
		catch(z) 
		{	
			return false; 
		}
		return true;
	};
	return this;
}

function cargar_contenido(target, url) 
{ 
	document.getElementById(target).innerHTML = "<p>Cargando...</p>"; 
	var myConn = new XHConn(); 
	if (!myConn) alert("XMLHTTP no esta disponible. Inténtalo con un navegador más actual."); 
	var peticion = function (oXML) 
	{ 
		document.getElementById(target).innerHTML = oXML.responseText; 
	}; 
	myConn.connect(url, "GET", "", peticion); 
}

con esto consigo cargar varios includes en varios divs en el index.php

El menu con los enlaces, estan dentro de un include tambien y los enlaces son tal que asi:

Código HTML:
<a href="javascript:cargar('rutadelinclude,'id');">enlace 1</a> 
rutadelinclude es la ruta del include a cargar
id es el identificador del enlace para luego cargar diferentes includes en el index, dependiendo del enlace dado

Código HTML:
<script type="text/javascript" language="javascript">

var v,p;

function cargar(ruta,id)
{
cargar_contenido("foto", "includes/foto.php?f=" + id); //Foto arriba a la izquierda
	cargar_contenido("fotos", "includes/fotos.php?f=" + id); //Fotos arriba a la derecha
	cargar_contenido("titulo", "includes/titulos.php?valor=" + id); //Titulo del marco

//Aqui cargo diferentes includes, dependiendo de la ruta y del indetificador
///Ahora viene el meoyo de la cuestion

switch (id) 
	{ 
		case "11": //FORO
			cargar_contenido("banners", "includes/banners.php?b=" + id); //banners
			cargar_contenido("mayor9", ruta); //Tabla inferior derecha
			v = true;
			break 
		case "21": //Pesión Andreva
			cargar_contenido("m", ruta); //Tabla inferior
			p = true;
			break 
        default: 
			if(v)
			{
				//cargar_contenido("m", "includes/enlacemayor.php"); //Tabla inferior
				cargar_contenido("banners", "includes/banners.php?b=" + id); //banners				
				cargar_contenido("mayor9", "includes/enlace.php"); //Tabla inferior derecha

cargar_contenido("anuncios", "includes/anuncios.php?a=id"); //Anuncios
					cargar_contenido("detalles", ruta); //Páginas
								
			}	
			else
			{
				cargar_contenido("banners", "includes/banners.php?b=" + id); //banners
				cargar_contenido("anuncios", "includes/anuncios.php?a=" + id); //Anuncios
				cargar_contenido("detalles", ruta); //Páginas
			}
    } 
}
</script> 
ACLARACION:

tengo tres divs banners, anuncios, detalles

en detalles cargo los enlaces, excepto en 2 que los cargo en un div "mayor9" que abarca los divs anuncios y detalles y un tercero "m" que abarca los tres divs(banners, anuncios, detalles), esto lo hago poque estos dos enlaces quiero que se cargen ocupando un mayor tamaño que el div detalles, como el innerHTML se come lo que hay en los divs, si llamo al div "m" y cargo el codigo de un enlace cuando quiera dar a otros enlaces y que se me cargen en el div "detalles" me dada error ya que no existe el div detalles, asi que lo que hice fue meter el codigo del los div "anuncios" y "detalles" en un include(enlace.php) y el codigo del div "banners" y "mayor9" en otro include(enlacemayor).php, luego con la funcion cargar comprobar cuando se da a un enlace u a otro y dependiendo del cual se da carga uno includes u otros, el problema es que cuando se carga la página por defecto muestra todos los divs correctamente, asi que se puede acceder a ellos pero cuando cargo en el div "mayor9" el include me lo carga bien, pero si intento cargar a continuacion otros enlaces en detalle no funciona al menos en firefox, en el explorer, la primera vez me muestra el include por defecto y si vuelvo a darle al enlace me lo muestra bien, pero el firefox solo muestra el que es por defecto, yo creo que el problema esta aqui:

Código HTML:
if(v)
			{
//cargar_contenido("m", "includes/enlacemayor.php"); //Tabla inferior
				cargar_contenido("banners", "includes/banners.php?b=" + id); //banners
cargar_contenido("mayor9", "includes/enlace.php"); //Tabla inferior derecha
cargar_contenido("anuncios", "includes/anuncios.php?a=id"); //Anuncios
					cargar_contenido("detalles", ruta); //Páginas
}
como cuando enlace.php este llama a otro include, cuando el navegador intenta cargar los divs "anuncios" y "detalles", no los ve de entrada y ya no los carga.

Por eso e intentado varias cosas, por ejemplo que el navegador lea primero todo el codigo y luego cargue el includes en los divs "anuncios" y "detalles"

o si alguien se le ocurre como hago para que el ajax me procese el codigo, siento haberme extendido tanto, pero espero haber dejado bien claro la problematica que tengo, gracias de antemano

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332