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