Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/09/2006, 15:50
Avatar de MaBoRaK
MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Tutorial: Ajax sin iframes ni xmlhttprequest

He publicado este tutorial en mi sitio http://leimnud.info y veran un ejemplo funcionando

Ajax sin iframes ni xmlhttprequest


Intro: He visto en muchos sitios web que hacen AJAX con el objeto XMhttpRequest o con iframes pero pocos con este m'etodo, es sencillo r'apido y accesible en cuanto a seguridad aun lo voy investigando.

La idea: Primeramente aclarar que no se como explicar la idea... pero el fin justifica los medios, soy malo explicando pero la idea es esta ..... tener un objeto global llamada AJI la cual se encargara de todo el proceso AJAX, luego cargar un javascript externo con parametros GET:

http://www.algo.com/as.js?a=121212&b=kaskj;


el cual actuar'a como servidor y que soltar'a una variable -> aji.database['nroInstancia'].aji="response Ajax" <- entonces la idea AJAX es tener un controlador que verifique si se ha creado esa variable cada x segundos y si al final se ha creado la variable terminamos el proceso y llamamos a una funcion callback con el valor de la variable -> aji.database['nroInstancia'].aji="response Ajax".

Eso es todo ...ni yo me entend'i pero la idea es esa talvez la entiendan mejor en codigo este es el objeto que he llamado AJI.

Código PHP:
var aji={
    
database:[],
    
nuevo:function(param)
    {
        
_1="ajaxN"+Math.floor(Math.random()*2199);
        
_2=aji.database[_1]=param;
        
_2.name=_1;
        
_2.completed=false;
        
uri=_2.url+"?ajiId="+_2.name+((_2.param)?"&"+_2.param:"");
        
_n document.createElement('script');
        
_n.src uri;
        
_n.type "text/javascript";
        
document.getElementsByTagName("HTML")[0].getElementsByTagName("HEAD")[0].appendChild(_n);
        
_2.script=_n;
        
_2.interval setInterval("aji.verificar('"+_2.name+"')"500);
    },
    
verificar:function(param)
    {
        
_1=aji.database[param];
        if(!
_1.aji)
        {
            
_1.g+=1;
            return;
        }
        else
        {
            
clearInterval(_1.interval);
            
aji.tools.element.remove(_1.script);
            
aji.finish(param);
        }
    },
    
finish:function(param)
    {
        
_1=aji.database[param];
        
_2=_1.callback.funcion.param;
        if(!
_2)
        {
            
_2={};
            
_2.aji=_1.aji;
        }
        else
        {
            
_2.aji=_1.aji;
        }
        
delete aji.database[param];
        
_1.callback.funcion.exec(_2);
    },
    
tools:{
        
element:{
            
remove:function(elemID) {
                
elem = (typeof elemID == "string")?document.getElementById(elemID):elemID;
                if(
elem.parentNode)
                {
                    
elem.parentNode.removeChild(elem);
                }
                else if(
elem.parentElement)
                {
                    
elem.parentElement.removeChild(elem);
                }
            }
        }
    }

Como usarlo: Tan simple como esto:

Código PHP:
ajsa=function()
{
    
aji.nuevo({ 
        
url:"http://wilmer.colosa.net/ajiserver.php"//url del servidor
        
param:"valor1=8&valorN=9"//valores GET
        
callback:{                 //objeto de retorno
            
funcion:{            //funcion de retorno
                
exec:ajsa2,        //nombre de la funcion
                
param:false        //parametros de la funcion de retorno. NOTA:
                                   //Los parametros deben pasarse como un OBJETO LITERAL
                                   //{valor1:12,valorN:"algo"}
            
}
        }
    })

en nuestra funcion callback.
Código PHP:
sjsa2=function(param)
{
/*
Lo que contiene param son los parametros que se pasaron como un  OBJETO LITERAL
param.valor1=algo;
param.valorN=algo;

y se aniade un elemento al objeto:
param.aji : contiene el response de la operacion
*/
alert(aram.aji);

Nuestro Servidor: En el lado del servidor tenemos:
Código PHP:
<?php
$a
=$_GET['ajiId']; //importante contiene el ID de la instancia
$result="Este contenido es generado en una variable JS entonces podemos devolver desde el servidor 
un String, objeto,array,etc."
;
/*
La siguiente linea es importante porque recuerden que devolvemos un
valor javascript y debe ir en una sola linea asi que si devuelven una cadena
con \n o \r deben parsearla para que sea de una sola linea
*/
$result=str_replace("\n","",$result);
?>
/*
Aqui se crea el response;
*/
aji.database['<?=$a;?>'].aji="<?=addslashes($result);?>";
Bueno es hasta donde puedo explicar, el resto del codigo es intuitivo espero que les sirva.


abajo un ejemplo en html funcional

Código:
<script type="text/javascript" src="http://wilmer.colosa.net/aji.js">
</script>
<script type="text/javascript">
ajsa=function()
{
	document.getElementById("aji_container").innerHTML="Loading......";
	aji.nuevo({
		url:"http://wilmer.colosa.net/ajiserver.php",
		param:"k=8&j=9",
		callback:{
			funcion:{
				exec:ajsa2,
				param:false
			}
		}
	})
}
ajsa2=function(param)
{
	document.getElementById("aji_container").innerHTML=param.aji
}
</script>




<a href="#" onClick="ajsa(); return false"> Cargar contenido</a> (<b>aji</b>)<br>
<div id="aji_container" style="border:1px dashed #006699;padding:5px;"></div>
__________________

Maborak Technologies