Pasar tus links a Ajax con Jquery
Escrito por giancarloMar 4
Hoy día estaba con Javier de Mancormedia y ya había terminado una aplicación bien interesante, pero el siguiente paso era pasar todos los links para que funcionen con Ajax. No ibamos a cambiar todos los links para que funcionen con Ajax, uno por uno, entonces se me ocurrió una idea bien sencilla pero efectiva.
Por ejemplo, toda la aplicación estaba dentro de un div con el id “data”. Entonces con unas simples líneas de javascript se pudo realizar este cambio sin la necesidad de tocar nada de la aplicación.
Primero están los links dentro del DIV
1 2 3 4 5 | <div id="data"> <a href="link1.html">Link 1</a><br /> <a href="link2.html">Link 2</a><br /> <a href="link3.html">Link 3</a> </div> |
Ahora solo llamamos a la librería JQuery y escribímos nuestro código paso a paso
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <div id="data">
<a href="link1.html">Link 1</a><br />
<a href="link2.html">Link 2</a><br />
<a href="link3.html">Link 3</a>
</div>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script language="javascript">
function Cargo(){
$("#data a").click(function(){
alert(this.href);
return false;
});
}
$(document).ready(Cargo);
</script> |
Primero decimos que cuando cargue la página llame a la función “Cargo”, donde todas las etiquetas “<a>” dentro de “<div id=”data”></div>” luego de ser cliqueadas muestren una alerta de la ruta absoluta de su destino pero luego con el “return false;” estamos diciendo que no vaya a ningún sitio.
Lo que vamos a hacer ahora es cargar esta misma ruta en el DIV mediante Ajax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <div id="data">
<a href="link1.html">Link 1</a><br />
<a href="link2.html">Link 2</a><br />
<a href="link3.html">Link 3</a>
</div>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script language="javascript">
function Cargo(){
$("#data a").click(function(){
UpdateDiv(this.href);
return false;
});
}
function UpdateDiv(Url){
$.ajax({
type: 'get',
url: Url,
dataType: 'html',
success: function(data){
$("#data").html(data)
}
});
}
$(document).ready(Cargo);
</script> |
Con este ejemplo hacemos que cargue la página en el “DIV”, pero qué pasa si queremos cargar la información en otro DIV y que sea dinámico según el link? Igual de sencillo. Solamente ponemos un atributo más en la etiqueta “<a>”, “rel”, y lo igualamos al nombre del DIV que queremos que cargue la página.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <div id="data">
<a href="link1.html" rel="data2">Link 1</a><br />
<a href="link2.html">Link 2</a><br />
<a href="link3.html">Link 3</a>
</div>
<!-- Aquí estamos creando la otra capa -->
<div id="data2"></div>
<script type="text/javascript" language="javascript" src="jquery.js"></script>
<script language="javascript">
function Cargo(){
$("#data a").click(function(){
UpdateDiv(this.href, this.rel);
return false;
});
}
function UpdateDiv(Url, Capa){
Capa = Capa||"data";
$.ajax({
type: 'get',
url: Url,
dataType: 'html',
success: function(data){
$("#"+Capa).html(data)
}
});
}
$(document).ready(Cargo);
</script> |
Si quieren que todos los links carguen por ajax, pero algunos no, podemos hacer que el valor de “rel” sea “no-ajax”. Solo cambiamos la función “Cargo” (por cierto, pueden darle cualquier nombre a las funciones)
function Cargo(){ $("a").click(function(){ if(this.rel != "no-ajax"){ UpdateDiv(this.href, this.rel); return false; }else{ return true; } }); }
En este caso, todos los links cargaran por ajax y la información se podrán en el div con el ID igual al valor que tiene el atributo “rel” de los links, excepto los que tengan como valor “no-ajax”
Eso es todo, como ven solo son unas pocas líneas. Todo es cosa de creatividad y hacer las funciones de tal manera que funcione para todos los casos.
No olviden crear las páginas para que no tengan problemas con los 404.

Absolutamente Brutal!
De hecho, no se me hubiese ocurrido y estas ideas son las que hacen de este blog una maravilla! jeje Saludos y gracias!
Este ejemplo fue hecho porque se tuvo que hacer para una aplicación. Si alguien tiene alguna idea o algún problema con algún tema no duden en avisar y se podría hacer un artículo para solucionarlo.
hola, tu script es de los mas sencillos y eficientes q he visto, te cuento qlo estoy implementando en un moodle, pero el problema es que quiero restringuir algunas urls , dentro del div principal. Tienes una manera de hacerlo?
He expandido el artículo, mira si ahora si te sirve lo que he puesto, es el último ejemplo.
muchas gracias! funciono perfecto. Disculpa que abuse de tu tiempo pero ahora solo tengo un problema cuando cargo paginas mediante post, hay manera de definir en tu script que utilize tanto get como post? (type: ‘get’) . ya que al cargar una pagina usando post, me aparece que no encuentra la pagina (404) , en tu articulo lo comentas pero no lo tengo muy claro
Pero no tiene nada que ver que sea post o get, es igual. Mira bien. Lo único que cambia es que en el javascript pones (type: ‘post’) y en un PHP, en vez de usar $_GET, usas $_POST
Apenas me estoy introduciendo en Jquery pero tu algoritmo ta super bien estructurado y facil de usar ya comenze a implementarlo..
gracias
Hola,
Estoy dando mis primeros pasos en JQUERY, y no se si es que me estoy salteando etapas o que, pero estoy tropezando con una problema y espero que puedan ayudarme.
Este es el escenario:
un index.html que tiene un boton y un div IDentificado como “apellido” (vacio inicialmente). Cuando se clickea el boton, se abre una ventana modal con el contenido de form.html.
archivo form.html: tiene un formulario un campo llamado “nombre”, cuando se hace click en submit, se ejecuta un javascript que mediante $.ajax() llama a un php que busca en una base de datos y devuelve al apellido asociado al nombre. Luego se DEBERIA mostrar en el div IDentificado como “apellido” que esta en la ventana madre el “apellido”.
Por supuesto todo es mas complejo que esto, pero resumo un poco las cosas a efecto que queda mas claro.
Todo se ejecuta perfectamente cuando espio con firebug, pero el div apellido no se refresca, no muestra el apellido que envia el javascript desde la ventana modal.
Cuando pruebo todo sin ventanas modales, todo va bien.
La pregunta es: ¿desde una ventana modal, como paso contenido a un div que esta en la ventana madre? Se que deberia ser algo como (“#apellido”).append(html); pero no funciona.
Alguna ayuda, por favor?
Gracias!!!
Guille
Bueno, tu pregunta ya es para un foro, pero si quieres meter info en un div, solo pones
$(“div#id”).html(“aqui va el texto”);
Giancarlo, gracias por tu respuesta.
Si, hasta eso llego, pero tene en cuenta este punto: ese guion, el $(“div#id”).html(“aqui va el texto”);, se ejecuta en la pagina form.html que se muestra en la ventana modal, y el div donde quiere escribir, esta en la ventana madre.
Alguna idea de como hacerlo?
Gracias Giancarlo!
Pero cuando termina de cargar el AJAX no puedes correr el script para que funcione lo que quieres? con el “success” del “$.ajax”?
Se que es dificil de explicar, y mucho mas de entender si no se tiene a la vista la pagina, pero no encuentro forma mas clara de explicarlo.
la pagina madre no tiene ajax en absoluto. tiene un boton y un div llamado apellido. cuando hago click en el boton se abre una ventana modal que muestra como contenido otra pagina, llamada form.html. esta pagina muestra un formulario que pide un nombre. cuando escribo el nombre y clickeo en submit se ejecuta (todo dentro de form.html, es decir, dentro de la ventana modal) un javascript, que a su vez ejecuta un buscar.php que busca en la base de datos por nombre y devuelve un apellido. lo que necesito es que el apellido devuelto se escriba dentro del div que esta en la pagina madre. Yo veo con Firebug que todo se ejecuta bien, el javascript que busca en la base de datos y devuelve un apellido, pero no logro que el apellido, mediante ajax, se escriba en el div que esta en la pagina madre. Esa es la pregunta: como escribo en un div que esta en una pagina que no es la activa o la que tiene el foco?
Gracias Giancarlo!
Bueno, creo que debes ir a un foro. Este artículo habla de algo específico y no creo que sea el mejor medio para ayudarte en tu problema. Si quieres anda a forosdelweb.com
Si, tienes razon. Debo ir a un lugar donde realmente sepan. Gracias de todas maneras!
Jajajaja… todo para que caiga en tu juego y te responda x acá. Has la pregunta en el foro y me pasas el link, ahi te puedo ayudar todo lo que quieras
Giancarlo, que juego? Al igual que yo, vos no sabes como resolver este problema que tengo, y lo mas sano es hacer lo que me indicas: ir a donde a preguntar a donde realmente sepan. No se porque crees que tengo que hacerte “un juego” para que “caigas” en alguna supuesta trampa y me contestes aca. No tengo ninguna desesperacion en solucionarlo, si se puede bien, y sino no lo hago de otra forma. Cero stress. Relajate tambien y deja de buscar conspiraciones donde no las hay. De todos modos, agradezco mucho tu tiempo.
Para nada, mas bien. Si quieres que te ayude pon tu pregunta en un foro y pásame el link
Interesante, pero qué pasa si lo que deseo cargar en el DIV es un PHP que recibe parametros por POST?
Ves que en la función UpdateDiv sale
type: ‘get’,
Cambialo por
type: ‘post’,
Ah, y le mandas la data mediante un objeto, asi:
$.ajax({
type: ‘get’,
url: Url,
dataType: ‘html’,
data: {nombre: “giancarlospot”},
success: function(data){
$(“#”+Capa).html(data)
}
});
una preguntita este escript ami me funciona de 10 solo tengo un problemita espero me puedan ayudar, hay una manera que solo cargue cierto objeto de la pagina por que ami me carga toda la pagina en el div y yo quiero que solo cargue cierto contenido del archivo donde hago la petición.
seguro que es algo con getelementbyid