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

Problema cargando webs en AJAX, no salen los scripts

Estas en el tema de Problema cargando webs en AJAX, no salen los scripts en el foro de Frameworks JS en Foros del Web. Pues eso, tengo una página que dentro de su contenedor "Derecha" carga 2 paginas, con un script cada una, pero estos scripts no se llegan ...
  #1 (permalink)  
Antiguo 13/07/2009, 04:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 5 meses
Puntos: 2
Problema cargando webs en AJAX, no salen los scripts

Pues eso, tengo una página que dentro de su contenedor "Derecha" carga 2 paginas, con un script cada una, pero estos scripts no se llegan a ejecutar al hacer la llamada desde AJAX, en cambio, si abro su pagina sin AJAX, cargan perfectamente.

Pagina Llamante:
Código:
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
  <link rel="StyleSheet" href="css/estilo.css" media="screen" type="text/css">
  <script type="text/javascript" src="utils/jscharts.js"></script>
  <script type="text/javascript" src="utils/ajax.js"></script>

  <title>Prueba Cuadro de mandos</title>
</head>
<body>

  <div id="completa">

    <div id="top">
      <p class="titulo">Pantalla de indicadores</p>
    </div>
    
    <div id="Superior">
      <!-- Pestañas -->
      <div id="header">
        <ul>
          <li><a href="javascript:llamarasincrono('index1.html', 'Derecha');">Uno</a></li>
          <li><a href="javascript:llamarasincrono('index2.html', 'Derecha');">Dos</a></li>
          <li><a href="#">Tres</a></li>
          <li><a href="#">Cuatro</a></li>
          <li id="current"><a href="#">Cinco</a></li>
        </ul>
      </div>
      
    </div>
 
    <div id="Izquierda">
      <p class="cabecera">Dimensiones</p>
      
      <br>
      <!-- Tablas de datos -->
      <p class="texto1">Año</p>
      <table border=1 align=center>
        <TR>
         <TD><p class="texto2">Dato 1</p></TD>
         <TD><p class="texto2">Dato 2</p></TD>
         <TD><p class="texto2">Dato 3</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 4</p></TD>
         <TD><p class="texto2">Dato 5</p></TD>
         <TD><p class="texto2">Dato 6</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 7</p></TD>
         <TD><p class="texto2">Dato 8</p></TD>
         <TD><p class="texto2">Dato 9</p></TD>
        </TR>
      </table>
      
      <br>
        
      <p class="texto1">Factura</p>
      <table border=1 align=center>
        <TR>
         <TD><p class="texto2">Dato 1</p></TD>
         <TD><p class="texto2">Dato 2</p></TD>
         <TD><p class="texto2">Dato 3</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 4</p></TD>
         <TD><p class="texto2">Dato 5</p></TD>
         <TD><p class="texto2">Dato 6</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 7</p></TD>
         <TD><p class="texto2">Dato 8</p></TD>
         <TD><p class="texto2">Dato 9</p></TD>
        </TR>
      </table>
      
      <br>
        
      <p class="texto1">Expediente</p>
      <table border=1 align=center>
        <TR>
         <TD><p class="texto2">Dato 1</p></TD>
         <TD><p class="texto2">Dato 2</p></TD>
         <TD><p class="texto2">Dato 3</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 4</p></TD>
         <TD><p class="texto2">Dato 5</p></TD>
         <TD><p class="texto2">Dato 6</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 7</p></TD>
         <TD><p class="texto2">Dato 8</p></TD>
         <TD><p class="texto2">Dato 9</p></TD>
        </TR>
      </table>
      
      <br>
        
      <p class="texto1">Cliente</p>
      <table border=1 align=center>
        <TR>
         <TD><p class="texto2">Dato 1</p></TD>
         <TD><p class="texto2">Dato 2</p></TD>
         <TD><p class="texto2">Dato 3</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 4</p></TD>
         <TD><p class="texto2">Dato 5</p></TD>
         <TD><p class="texto2">Dato 6</p></TD>
        </TR>
        <TR>
         <TD><p class="texto2">Dato 7</p></TD>
         <TD><p class="texto2">Dato 8</p></TD>
         <TD><p class="texto2">Dato 9</p></TD>
        </TR>
      </table>
    </div>
    
    <div id="Derecha">
      
    </div>
    
  </div>
  
</body>
</html>
Pagina Llamada A:
Código:
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
  <link rel="StyleSheet" href="css/estilo.css" media="screen" type="text/css">
  <script type="text/javascript" src="utils/jscharts.js"></script>
  <script type="text/javascript" src="utils/ajax.js"></script>
  <title>Prueba Cuadro de mandos</title>
</head>
<body>
<div id="completa">
    <div id="Grafico">
        <p class="cabecera">Indicadores</p>
        <br>
        <!-- Creación del gráfico centrado -->
        <div class=centrarImagen>
        <div id="graph">Cargando grafico...</div>
        <script type="text/javascript">
          
          var misDatos = new Array (['Una',20],['Dos',10],['Tres',40],['Cuatro',30],['Cinco',5]);
          var misColores = new Array ('#0000FF','#0000FF','#0000FF','#0000FF','#0000FF');
          var miGrafico = new JSChart('graph','bar');
          miGrafico.setDataArray(misDatos);
          miGrafico.colorizeBars(misColores);
          miGrafico.setSize(500,400);
          miGrafico.setTitle('Gabinete de Diseno y Organizacion S.A. (Grafico de prueba)');
          miGrafico.setAxisNameX('Leyenda Vertical');
          miGrafico.setAxisNameY('Leyenda Horizontal');
          miGrafico.setAxisNameColor('#000000');
          miGrafico.setAxisColor('#000000');
          miGrafico.setAxisValuesColor('#000000');
          miGrafico.setBarBorderColor('#000000');
          miGrafico.setBarOpacity(1);
          miGrafico.setBarValues(false);
          miGrafico.setGrid(false);
          miGrafico.setTitleColor('#000000');
          miGrafico.setBarSpacingRatio(40);
          
          miGrafico.draw();
          
        </script>
        
        </div>
    </div>
</div>
</body>
</html>
Pagina Llamada B:
Código:
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
  <link rel="StyleSheet" href="css/estilo.css" media="screen" type="text/css">
  <script type="text/javascript" src="utils/jscharts.js"></script>
  <script type="text/javascript" src="utils/ajax.js"></script>
  <title>Prueba Cuadro de mandos</title>
</head>
<body>
<div id="completa">
    <div id="Grafico">
      <p class="cabecera">Indicadores</p>
      <br>
      <!-- Creación del gráfico centrado -->
      <div class=centrarImagen>
      <div id="graph">Cargando grafico...</div>
      <script type="text/javascript" src="utils/jscharts.js"></script>
      <script type="text/javascript">
        
        var misDatos = new Array (['Una',20],['Dos',10],['Tres',40],['Cuatro',30],['Cinco',5]);
        var misColores = new Array ('#0000FF','#0000FF','#0000FF','#0000FF','#0000FF');
        var miGrafico = new JSChart('graph','pie');
        miGrafico.setDataArray(misDatos);
        miGrafico.setSize(500,400);
        miGrafico.setTitle('Gabinete de Diseno y Organizacion S.A. (Grafico de prueba)');
        miGrafico.setGrid(false);
        miGrafico.setTitleColor('#000000');
        miGrafico.setPieUnitsColor('#000000');
        
        miGrafico.draw();
        
      </script>
      </div>
      
    </div>
</div>
</body>
</html>
y mi archivo AJAX ajax.js:
Código:
// Documento JavaScript
// Esta función cargará las paginas
function llamarasincrono (url, id_contenedor)
{
    var pagina_requerida = false;
    if (window.XMLHttpRequest)
    {
        // Si es Mozilla, Safari etc
        pagina_requerida = new XMLHttpRequest ();
    } else if (window.ActiveXObject)
    {
        // pero si es IE
        try 
        {
            pagina_requerida = new ActiveXObject ("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            // en caso que sea una versión antigua
            try
            {
                pagina_requerida = new ActiveXObject ("Microsoft.XMLHTTP");
            }
            catch (e)
            {
            }
        }
    } 
    else
    return false;
    pagina_requerida.onreadystatechange = function ()
    {
        // función de respuesta
        cargarpagina (pagina_requerida, id_contenedor);
    }
    pagina_requerida.open ('GET', url, true); // asignamos los métodos open y send
    pagina_requerida.send (null);
}
// todo es correcto y ha llegado el momento de poner la información requerida
// en su sitio en la pagina xhtml
function cargarpagina (pagina_requerida, id_contenedor)
{
    if (pagina_requerida.readyState == 4 && (pagina_requerida.status == 200 || window.location.href.indexOf ("http") == - 1))
    document.getElementById (id_contenedor).innerHTML = pagina_requerida.responseText;

}
He mirado varios post por el foro pero no me acaba de quedar claro y no lo consigo, a ver si alguien me pudiera ayudar...

Gracias de antemano.
  #2 (permalink)  
Antiguo 14/07/2009, 09:03
Avatar de deirdre  
Fecha de Ingreso: mayo-2009
Mensajes: 690
Antigüedad: 15 años
Puntos: 45
Respuesta: Problema cargando webs en AJAX, no salen los scripts

Hola JuaNiNNaio

Pásate por este hilo, donde se ha tratado este tema:

http://www.forosdelweb.com/f77/howto...e-ajax-510438/

Bye
  #3 (permalink)  
Antiguo 14/07/2009, 09:18
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Respuesta: Problema cargando webs en AJAX, no salen los scripts

Tema trasladado desde Web general
__________________
Javascript Códigos - Bambú difunde
  #4 (permalink)  
Antiguo 14/07/2009, 12:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Problema cargando webs en AJAX, no salen los scripts

Cita:
Iniciado por deirdre Ver Mensaje
Hola JuaNiNNaio

Pásate por este hilo, donde se ha tratado este tema:

http://www.forosdelweb.com/f77/howto...e-ajax-510438/

Bye
Gracias deirdre, ya habia leido ese hilo, lo cierto es que no lo termino de conseguir.

Por ejemplo, veo que tengo que crear un arhivo interpretadorAjax.js y añadirlo al header, hasta ahi bien. Pero luego, la pagina llamada es la que tiene el script, el siguiente codigo:

Código:
var scs=myAjax.responseText.extractScript();    //capturamos los scripts
        myDivUoTroLugar.innerHTML=myAjax.responseText.stripScript();    //eliminamos los scripts... ya son innecesarios
        scs.evalScript();       //ahora si, comenzamos a interpretar todo
Donde tendria que ir?? en la pagina llamante o en la llamada??

Y el miDivuOtroLugar.innerHTML tampoco lo entiendo...
  #5 (permalink)  
Antiguo 15/07/2009, 06:42
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Problema cargando webs en AJAX, no salen los scripts

Vale ya he conseguido que me cargue los scripts, el problema que tengo ahora es que solo lo hace en Firefox, y no en los demas navegadores...

ajax.js
Código:
var tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
/**
* Eval script fragment
* @return String
*/
String.prototype.evalScript = function()
{
        return (this.match(new RegExp(tagScript, 'img')) || []).evalScript();
};
/**
* strip script fragment
* @return String
*/
String.prototype.stripScript = function()
{
        return this.replace(new RegExp(tagScript, 'img'), '');
};
/**
* extract script fragment
* @return String
*/
String.prototype.extractScript = function()
{
        var matchAll = new RegExp(tagScript, 'img');
        return (this.match(matchAll) || []);
};
/**
* Eval scripts
* @return String
*/
Array.prototype.evalScript = function(extracted)
{
				var s=this.map(function(sr){
				var sc=(sr.match(new RegExp(tagScript, 'im')) || ['', ''])[1];
				if(window.execScript){
				    window.execScript(tagScript);
				}
				else
				{
				 window.setTimeout(sc,0);
				}
				});
				return true;
};
/**
* Map array elements
* @param {Function} fun
* @return Function
*/
Array.prototype.map = function(fun)
{
        if(typeof fun!=="function"){return false;}
        var i = 0, l = this.length;
        for(i=0;i<l;i++)
        {
                fun(this[i]);
        }
        return true;
};  

function AJAX2(){
	var ajaxs = ["Msxml2.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLH TTP.5.0","Msxml2.XMLHTTP.3.0","Microsoft.XMLHTTP"];
	var ajax = false;
	for(var i=0 ; !ajax && i<ajaxs.length ; i++){
		try{ 
			ajax = new ActiveXObject(ajaxs[i]); 
		}
		catch(e) { 
			ajax = false; 
		}
	}
	if(!ajax && typeof XMLHttpRequest!='undefined') {
		ajax = new XMLHttpRequest();
	}
	return ajax;
}

function getPagina(pagina,capa){
	
	document.getElementById(capa).innerHTML = "<center>C A R G A N D O</center>"; 
	
	var ajax = AJAX2(); 
	if(!ajax){
		document.getElementById(capa).innerHTML = "Error: El navegador no acepta ActiveX. No se pudo cargar la pagina.";
		return false;
	}

	ajax.open("POST",pagina,true);
	
	ajax.onreadystatechange = function() {
		if (ajax.readyState == 4) { 
			var scs=ajax.responseText.extractScript();
      document.getElementById(capa).innerHTML=ajax.responseText.stripScript();
      scs.evalScript();  
		}
	}
	
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send(null);
}
Ese es mi ajax.js, alguien sabria decirme como implementarlo para que funcione en otros navegadores, por ejemplo explorer...?

Última edición por JuaNiNNaio; 15/07/2009 a las 06:49
  #6 (permalink)  
Antiguo 16/07/2009, 06:10
 
Fecha de Ingreso: diciembre-2007
Mensajes: 124
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Problema cargando webs en AJAX, no salen los scripts

Nadie puede ayudarme¿?
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 08:04.