Ver Mensaje Individual
  #30 (permalink)  
Antiguo 25/02/2008, 17:38
tonqac
 
Fecha de Ingreso: junio-2005
Mensajes: 2
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: HOWTO: Ejecutar javascript que viene de ajax

gente, antes que nada quiero agradecerles muchisimo ya que esta solucion me salvo la vida...

como forma de agradecimiento, les dejo esta funcion que creé basandome en estos posts, pero con la particularidad de que funcionan en todos los navegadores (encontré problemas con esta funcion en Mozilla)...

Les cuento como funciona:
tengo una pagina ASP que ejecuta la funcion "getpagina" pasandole como parametro la pagina que quiere recibir y el DIV donde mostrar la info

cualquier comentario será bienvenido

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);
}
pagina.asp:

Código:
<html>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
...
<div id="div_localidad"></div>
<select name="provincia" onChange="getPagina('localidad.asp?idprovincia='+this.value,'div_localidad');">
<option value="1">Buenos Aires</option>
<option value="2">Cordoba</option>
...
</select>
</html>

localidad.asp:

Código:
<html>
<%
sql="select nombre from provincias where id=" & request.querystring("id")
rs.open sql,oConn
if not rs.eof then nombre =rs(0)
rs.close

response.write "<script>alert('Ud ha seleccionado la provincia " & nombre & "')</script>"
</html>
Este es un ejemplo bastante tonto, donde solo pretendo demostrar que se puede ejecutar javascript desde una página llamada con Ajax.

Espero les sirva!