Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/11/2008, 06:58
Avatar de mrgubu
mrgubu
 
Fecha de Ingreso: febrero-2002
Ubicación: Granada
Mensajes: 431
Antigüedad: 22 años, 10 meses
Puntos: 2
AJAX PHP sencillo: una función para múltiples elementos

Hola, estoy empezando con AJAX y a partir de las funciones XMLHttpRequest de quirksmode consigo cargar texto en un <div> haciendo una llamada a un archivo php. Gracias a la función handleRequest() cuando hago click en el 'div1' se carga el contenido dinámico en el 'div1reciberespuesta'.

Lo que quiero hacer es modificar dicha función handleRequest para que me permita ejecutar la función sendRequest() desde cualquier div de la página, que se llamarían div2, div3, etc, y recibir la respuesta en 'div2reciberespuesta', 'div3reciberespuesta', etc.

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es-es" lang="es-es">

<
head>

<
titlequircksmode</title>

<
script type="text/javascript">
<!--
function 
sendRequest(url,callback,postData) {
    var 
req createXMLHTTPObject();
    if (!
req) return;
    var 
method = (postData) ? "POST" "GET";
    
req.open(method,url,true);
    
req.setRequestHeader('User-Agent','XMLHTTP/1.0');
    if (
postData)
        
req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
    
req.onreadystatechange = function () {
        if (
req.readyState != 4) return;
        if (
req.status != 200 && req.status != 304) {
//            alert('HTTP error ' + req.status);
            
return;
        }
        
callback(req);
    }
    if (
req.readyState == 4) return;
    
req.send(postData);
}

var 
XMLHttpFactories = [
    function () {return new 
XMLHttpRequest()},
    function () {return new 
ActiveXObject("Msxml2.XMLHTTP")},
    function () {return new 
ActiveXObject("Msxml3.XMLHTTP")},
    function () {return new 
ActiveXObject("Microsoft.XMLHTTP")}
];

function 
createXMLHTTPObject() {
    var 
xmlhttp false;
    for (var 
i=0;i<XMLHttpFactories.length;i++) {
        try {
            
xmlhttp XMLHttpFactories[i]();
        }
        catch (
e) {
            continue;
        }
        break;
    }
    return 
xmlhttp;
}


function 
handleRequest(req) {
    var 
writeroot document.getElementById('div1reciberespuesta');
    
writeroot.innerHTML req.responseText;
}


//-->
</script>
</head>

<body>


<div id="div1" onclick='sendRequest("php.php?q=menu1",handleRequest)'>click here (funciona)</div>
<div id="div1reciberespuesta"></div>


....
<!-- el resto de la página estaría llena de divs como estos con sus correspondientes onclicks en div2, div3, etc-->
<div id="div2">click here</div>
<div id="div2reciberespuesta"></div>

<div id="div3">click here</div>
<div id="div3reciberespuesta"></div>


</body>

</html> 
Sé que puedo detectar de dónde viene el evento con:

if (!e) var e = window.event;
elemento = (e.target) ? e.target.id : e.srcElement.id;

Pero me lío y no consigo aplicarlo en la práctica.
Gracias por adelantado.