Escolar Documentos
Profissional Documentos
Cultura Documentos
La librera jQuery
jQuery es la librera JavaScript que ha irrumpido con ms fuerza como alternativa a Prototype.
Su autor original es John Resig, aunque como sucede con todas las libreras exitosas,
actualmente recibe contribuciones de decenas de programadores. jQuery tambin ha sido
programada de forma muy eficiente y su versin comprimida apenas ocupa 20 KB.
jQuery comparte con Prototype muchas ideas e incluso dispone de funciones con el mismo
nombre. Sin embargo, su diseo interno tiene algunas diferencias drsticas respecto a
Prototype, sobre todo el"encadenamiento" de llamadas a mtodos.
La documentacin de jQuery es muy completa en ingls e incluye muchos ejemplos. Adems,
tambin existen algunos recursos tiles en espaol para aprender su funcionamiento bsico:
http://docs.jquery.com/
FUNCIONES Y MTODOS BSICOS
La funcin bsica de jQuery y una de las ms tiles tiene el mismo nombre que en Prototype,
ya que se trata de la "funcin dolar": $(). A diferencia de la funcin de Prototype, la de jQuery es
mucho ms que un simple atajo mejorado de la funcin document.getElementById().
La cadena de texto que se pasa como parmetro puede hacer uso de Xpath o de CSS para
seleccionar los elementos. Adems, separando expresiones con un carcter "," se puede
seleccionar un nmero ilimitado de elementos.
// Selecciona todos los enlaces de la pgina
$('a')
$('p[a]')
valida($(this));
});
Entre las utilidades definidas por jQuery para los eventos se encuentra la funcin toggle(), que
permite ejecutar dos funciones de forma alterna cada vez que se pincha sobre un elemento:
$("p").toggle(function(){
alert("Me acabas de activar");
},function(){
alert("Me acabas de desactivar");
});
En el ejemplo anterior, la primera vez que se pincha sobre el elemento (y todas las veces
impares), se ejecuta la primera funcin y la segunda vez que se pincha el elemento (y todas las
veces pares) se ejecuta la segunda funcin.
FUNCIONES PARA EFECTOS VISUALES
Las aplicaciones web ms avanzadas incluyen efectos visuales complejos para construir
interacciones similares a las de las aplicaciones de escritorio. jQuery incluye en la propia
librera varios de los efectos ms comunes:
// Oculta todos los enlaces de la pgina
$('a').hide();
Opcin
Descripcin
async
beforeSend
complete
Opcin
Descripcin
contentType
data
dataType
error
ifModified
processData
success
Opcin
Descripcin
timeout
type
url
Adems de la funcin $.ajax() genrica, existen varias funciones relacionadas que son
versiones simplificadas y especializadas de esa funcin. As, las funciones $.get() y $.post() se
utilizan para realizar de forma sencilla peticiones GET y POST:
// Peticin GET simple
$.get('/ruta/hasta/pagina.php');
// Con Prototype
new Ajax.Updater('info', '/ruta/hasta/pagina.php');
// Con jQuery
$('#info').load('/ruta/hasta/pagina.php');
Al igual que suceda con la funcin $.get(), la funcin $.load() tambin dispone de una versin
especfica denominada $.loadIfModified() que carga la respuesta del servidor en el elemento
slo si esa respuesta es diferente a la ltima recibida.
Por ltimo, jQuery tambin dispone de las funciones $.getJSON() y $.getScript() que cargan y
evalan/ejecutan respectivamente una respuesta de tipo JSON y una respuesta con cdigo
JavaScript.
A continuacin, el cdigo anterior realiza otro filtrado a partir de la seleccin original de enlaces.
Para volver a la seleccin original, se utiliza la funcin end() antes de realizar un nuevo filtrado.
De esta forma, la instruccin .end().filter('ocultame') es equivalente a realizar el filtrado
directamente sobre la seleccin original $('a').filter('.ocultame')).
El segundo grupo de funciones para la manipulacin de nodos DOM est formado por los
buscadores, funciones que buscan/seleccionan nodos relacionados con la seleccin realizada.
De esta forma, jQuery define la funcin children() para obtener todos los nodos hijo o
descendientes del nodo actual,parent() para obtener el nodo padre o nodo ascendente del
nodo actual (parents() obtiene todos los ascendentes del nodo hasta la raz del rbol)
y siblings() que obtiene todos los nodos hermano del nodo actual, es decir, todos los nodos que
tienen el mismo nodo padre que el nodo actual.
La navegacin entre nodos hermano se puede realizar con las funciones next() y pev() que
avanzan o retroceden a travs de la lista de nodos hermano del nodo actual.
Por ltimo, jQuery tambin dispone de funciones para manipular fcilmente el contenido de los
nodos DOM. Las funciones append() y prepend() aaden el contenido indicado como
parmetro al principio o al final respectivamente del contenido original del nodo.
Las funciones after() y before() aaden el contenido indicado como parmetro antes de cada
uno de los elementos seleccionados. La funcin wrap() permite "envolver" un elemento con el
contenido indicado (se aade parte del contenido por delante y el resto por detrs).
La funcin empty() vaca de contenido a un elemento, remove() elimina los elementos
seleccionados del rbol DOM y clone() copia de forma exacta los nodos seleccionados.
// Recorrer objetos
var producto = { id: '12DW2', precio: 12.34, cantidad: 5 };
window.onload = function() {
document.getElementById('enlace_1').onclick = muestraOculta;
document.getElementById('enlace_2').onclick = muestraOculta;
document.getElementById('enlace_3').onclick = muestraOculta;
}
Con Prototype, su cdigo se redujo a las siguientes instrucciones:
function muestraOculta() {
var id = (this.id).split('_')[1];
$('contenidos_'+id).toggle();
$('enlace_'+id).innerHTML = (!$('contenidos_'+id).visible()) ? 'Ocultar contenidos' : 'Mostrar
contenidos';
}
window.onload = function() {
$R(1, 3).each(function(n) {
Event.observe('enlace_'+n, 'click', muestraOculta);
});
}
Con jQuery, el mismo cdigo se puede escribir de la siguiente forma:
$(document).ready(function(){
$.each([1, 2, 3], function(i, n){
$('#enlace_'+n).toggle(
function() { $('#contenidos_'+n).toggle(); $(this).html('Mostrar contenidos'); },
function() { $('#contenidos_'+n).toggle(); $(this).html('Ocultar contenidos'); }
);
})
});
El cdigo anterior utiliza la funcin toggle() como evento que permite alternar la ejecucin de
dos funciones y como funcin que oculta un elemento visible y muestra un elemento oculto.
Otro de los ejercicios anteriores realizaba peticiones AJAX al servidor para comprobar si un
determinado nombre de usuario estaba libre. El cdigo original de JavaScript era:
var READY_STATE_COMPLETE=4;
var peticion_http = null;
function inicializa_xhr() {
if(window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
function comprobar() {
var login = document.getElementById("login").value;
peticion_http = inicializa_xhr();
if(peticion_http) {
peticion_http.onreadystatechange = procesaRespuesta;
peticion_http.open("POST", "http://localhost/compruebaDisponibilidad.php", true);
peticion_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
peticion_http.send("login="+login+"&nocache="+Math.random());
}
}
function procesaRespuesta() {
if(peticion_http.readyState == READY_STATE_COMPLETE) {
if(peticion_http.status == 200) {
var login = document.getElementById("login").value;
if(peticion_http.responseText == "si") {
document.getElementById("disponibilidad").innerHTML = "El nombre elegido ["+login+"]
est disponible";
}
else {
document.getElementById("disponibilidad").innerHTML = "NO est disponible el nombre
elegido ["+login+"]";
}
}
}
}
window.onload = function() {
document.getElementById("comprobar").onclick = comprobar;
}
Con Prototype se puede conseguir el mismo comportamiento con tres veces menos de lneas
de cdigo:
function comprobar() {
var login = $F('login');
var url = 'http://localhost/compruebaDisponibilidad.php?nocache=' + Math.random();
var peticion = new Ajax.Request(url, {
method:'post',
postBody:'login='+login,
onSuccess: function(respuesta) {
$('disponibilidad').innerHTML = (respuesta.responseText == 'si') ?
'El nombre elegido ['+login+'] est disponible' : 'NO est disponible el nombre elegido
['+login+']';
},
onFailure: function() { alert('Se ha producido un error'); }
});
}
window.onload = function() {
Event.observe('comprobar', 'click', comprobar);
}
jQuery tambin permite simplificar notablemente el cdigo de la aplicacin original:
function comprobar() {
var login = $('#login').value;
var peticion = $.ajax({
url: 'http://localhost/compruebaDisponibilidad.php?nocache=' + Math.random(),
type: 'POST',
data: { login: login },
success: function(respuesta) {
$('#disponibilidad').html((respuesta.responseText == 'si') ?
'El nombre elegido ['+login+'] est disponible' :
'NO est disponible el nombre elegido ['+login+']');
},
error: function() { alert('Se ha producido un error'); }
});
}
$(document).ready(function(){
$('#comprobar').click(comprobar);
});
AJAX
INTRODUCCIN
El mtodo XMLHttpRequest (XHR) permite a los navegadores comunicarse con el servidor sin
la necesidad de recargar la pgina. Este mtodo, tambin conocido como Ajax (Asynchronous
JavaScript and XML), permite la creacin de aplicaciones ricas en interactividad.
Las peticiones Ajax son ejecutadas por el cdigo JavaScript, el cual enva una peticin a una
URL y cuando recibe una respuesta, una funcin de devolucin puede ser ejecutada la cual
recibe como argumento la respuesta del servidor y realiza algo con ella. Debido a que la
respuesta es asncrona, el resto del cdigo de la aplicacin continua ejecutndose, por lo cual,
es imperativo que una funcin de devolucin sea ejecutada para manejar la respuesta.
A travs de varios mtodos, jQuery provee soporte para Ajax, permitiendo abstraer las
diferencias que pueden existir entre navegadores. Los mtodos en cuestin
son $.get(), $.getScript(), $.getJSON(),$.post() y $().load().
A pesar que la definicin de Ajax posee la palabra XML, la mayora de las aplicaciones no
utilizan dicho formato para el transporte de datos, sino que en su lugar se utiliza HTML plano o
informacin en formato JSON (JavaScript Object Notation).
En general, Ajax no trabaja a travs de dominios diferentes. Sin embargo, existen excepciones,
como los servicios que proveen informacin en formato JSONP (JSON with Padding), los
cuales permiten una funcionalidad limitada a travs de diferentes dominios.
CONCEPTOS CLAVE
La utilizacin correcta de los mtodos Ajax requiere primero la comprensin de algunos
conceptos clave.
Tipos de datos
Generalmente, jQuery necesita algunas instrucciones sobre el tipo de informacin que se
espera recibir cuando se realiza una peticin Ajax. En algunos casos, el tipo de dato es
especificado por el nombre del mtodo, pero en otros casos se lo debe detallar como parte de
la configuracin del mtodo:
html Para el transporte de bloques de cdigo HTML que sern ubicados en la pgina.
json Para transportar informacin en formato JSON, el cual puede incluir cadenas de
caracteres, arrays y objetos.
A pesar de los diferentes tipos de datos de que se puede utilizar, es recomendable utilizar el
formato JSON, ya que ste es muy flexible, permitiendo por ejemplo, enviar al mismo tiempo
informacin plana y HTML.
ASINCRONISMO
Debido a que, de forma predeterminada, las llamadas Ajax son asncronas, la respuesta del
servidor no esta disponible de forma inmediata. Por ejemplo, el siguiente cdigo no debera
funcionar:
var response;
$.get('foo.php', function(r) { response = r; });
console.log(response); // indefinido (undefined)
En su lugar, es necesario especificar una funcin de devolucin de llamada; dicha funcin se
ejecutar cuando la peticin se haya realizado de forma correcta ya que es en ese momento
cuando la respuesta del servidor esta lista.
$.get('foo.php', function(response) { console.log(response); });
AJAX Y FIREBUG
Firebug (o el inspector WebKit que viene incluido en Chrome o Safari) son herramientas
imprescindibles para trabajar con peticiones Ajax, ya que es posible observarlas desde la
pestaa Consola de Firebug (o yendo a Recursos > Panel XHR desde el inspector de Webkit) y
revisar los detalles de dichas peticiones. Si algo esta fallando cuando trabaja con Ajax, este es
el primer lugar en donde debe dirigirse para saber cual es el problema.
$.AJAX
El mtodo $.ajax es configurado a travs de un objeto, el cual contiene todas las instrucciones
que necesita jQuery para completar la peticin. Dicho mtodo es particularmente til debido a
que ofrece la posibilidad de especificar acciones en caso que la peticin haya fallado o no.
Adems, al estar configurado a travs de un objeto, es posible definir sus propiedades de
forma separada, haciendo que sea ms fcil la reutilizacin del cdigo. Puede
visitar api.jquery.com/jQuery.ajax para consultar la documentacin sobre las opciones
disponibles en el mtodo.
Utilizar el mtodo $.ajax
$.ajax({
// la URL para la peticin
url : 'post.php',
// la informacin a enviar
// (tambin es posible utilizar una cadena de datos)
data : { id : 123 },
}
});
NOTAUna aclaracin sobre el parmetro dataType: Si el servidor devuelve informacin que es
diferente al formato especificado, el cdigo fallar, y la razn de porque lo hace no siempre
quedar clara debido a que la respuesta HTTP no mostrar ningn tipo de error. Cuando est
trabajando con peticiones Ajax, debe estar seguro que el servidor esta enviando el tipo de
informacin que esta solicitando y verifique que la cabecera Content-type es exacta al tipo de
dato. Por ejemplo, para informacin en formato JSON, la cabecera Content-type debera
ser application/json.
success Establece una funcin a ejecutar si la peticin a sido satisfactoria. Dicha funcin recibe
como argumentos la informacin de la peticin (convertida a objeto JavaScript en el caso
que dataType sea JSON), el estatus de la misma y el objeto de la peticin en crudo.
timeout Establece un tiempo en milisegundos para considerar a una peticin como fallada.
traditional Si su valor es true, se utiliza el estilo de serializacin de datos utilizado antes de
jQuery 1.4. Para ms detalles puede visitar api.jquery.com/jQuery.param.
type De forma predeterminada su valor es GET. Otros tipos de peticiones tambin pueden ser
utilizadas (como PUT y DELETE), sin embargo pueden no estar soportados por todos los
navegadores.
url Establece la URL en donde se realiza la peticin. La opcin url es obligatoria para el
mtodo$.ajax;
MTODOS CONVENIENTES
En caso que no quiera utilizar el mtodo $.ajax, y no necesite los controladores de errores,
existen otros mtodos ms convenientes para realizar peticiones Ajax (aunque, como se indic
antes, estos estn basados el mtodo $.ajax con valores pre-establecidos de configuracin).
Los mtodos que provee la biblioteca son:
$.getJSON Realiza una peticin GET a una URL provista y espera que un dato JSON
sea devuelto.
data La informacin que se enviar al servidor. Su valor es opcional y puede ser tanto un
objeto como una cadena de datos (como foo=bar&baz=bim).Nota: esta opcin no es valida
para el mtodo$.getScript.
success callback Una funcin opcional que se ejecuta en caso que peticin haya sido
satisfactoria. Dicha funcin recibe como argumentos la informacin de la peticin y el
objeto en bruto de dicha peticin.
data type El tipo de dato que se espera recibir desde el servidor. Su valor es opcional.
Nota: esta opcin es solo aplicable para mtodos en que no est especificado el tipo de
dato en el nombre del mismo mtodo.
$.FN.LOAD
El mtodo $.fn.load es el nico que se puede llamar desde una seleccin. Dicho mtodo
obtiene el cdigo HTML de una URL y rellena a los elementos seleccionados con la informacin
obtenida. En conjunto con la URL, es posible especificar opcionalmente un selector, el cual
obtendr el cdigo especificado en dicha seleccin.
Utilizar el mtodo $.fn.load para rellenar un elemento
$('#newContent').load('/foo.html');
Utilizar el mtodo $.fn.load para rellenar un elemento basado en un selector
$('#newContent').load('/foo.html #myDiv h1:first', function(html) {
alert('Contenido actualizado');
});
AJAX Y FORMULARIOS
Las capacidades de jQuery con Ajax pueden ser especialmente tiles para el trabajo con
formularios. Por ejemplo, la extensin jQuery Form Plugin es una extensin para aadir
capacidades Ajax a formularios. Existen dos mtodos que debe conocer para cuando este
realizando este tipo de trabajos:$.fn.serialize y $.fn.serializeArray.
Transformar informacin de un formulario a una cadena de datos
$('#myForm').serialize();
Crear un array de objetos conteniendo informacin de un formulario
$('#myForm').serializeArray();
jsonp : 'callback',
EVENTOS AJAX
A menudo, querr ejecutar una funcin cuando una peticin haya comenzado o terminado,
como por ejemplo, mostrar o ocultar un indicador. En lugar de definir estas funciones dentro de
cada peticin, jQuery provee la posibilidad de vincular eventos Ajax a elementos seleccionados.
Para una lista completa de eventos Ajax, puede consultar docs.jquery.com/Ajax_Events.
AJAX EVENTS
Ajax requests produce a number of different events that you can subscribe to. Here's a full list of
the events and in what order they are triggered.
There are two types of events:
Local Events
These are callbacks that you can subscribe to within the Ajax request object, like so:
1
2
3
4
5
6
7
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ......
});
8
9
GLOBAL EVENTS
These events are triggered on the document, calling any handlers which may be listening. You
can listen for these events like so:
$(document).bind("ajaxSend", function(){
$("#loading").show();
}).bind("ajaxComplete", function(){
$("#loading").hide();
});
Global events can be disabled for a particular Ajax request by passing in the global option, like
so:
1
2
3
4
$.ajax({
url: "test.html",
global: false,
// ...
});
5
Events
This is the full list of Ajax events, and in the order in which they are triggered. The indented
events are triggered for each and every Ajax request (unless a global option has been set). The
ajaxStart and ajaxStop events are events that relate to all Ajax requests together.
AJAX JQUERY
AJAX significa Asynchronous JavaScript and XML. Esta tecnologa nos permite comunicarnos
con un servicio web sin tener que recargar la pgina. A pesar de que su nombre lo dice, XML
no es requerido para usar AJAX, de hecho, se utiliza JSON ms seguido.
Con jQuery, hacer uso de AJAX es muy sencillo. Para demostrarlo, estar utilizando la web API
de Open Weather Map (http://openweathermap.org/), a la cual har algunas solicitudes
utilizando AJAX y jQuery.
Comencemos.
OBTENIENDO DATOS
jQuery provee varias funciones para trabajar con AJAX. La ms comnmente usada $.ajax().
Pero ya hablare de algunas otras.
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
<meta charset="utf-8">
<title>jQuery Ajax</title>
<script>
function testAjax() {
$.ajax({
url: 'http://api.openweathermap.org/data/2.1/weather/city/caracas',
type: 'GET',
dataType:"jsonp",
success: function(data) {
function test2() {
var jqxhr = $.getJSON( "http://api.openweathermap.org/data/2.1/weather/city/caracas?
callback=?", function() {
alert( "success" );
})
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
});
}
</script>
</head>
<body>
<button onclick="testAjax();">click para probar</button>
<button onclick="test2();">click para probar 2</button>
</body>
</html>
El presente ejemplo hace uso de jQuery AJAX para obtener un objeto json de la direccin
"http://api.openweathermap.org/data/2.1/weather/city/caracas?type=json" con los datos del
clima de la ciudad de Caracas. Revisemos los parmetros pasados a la funcin AJAX:
type: Tipo de request (solicitud). Ejemplo: GET, POST, PUT, DELETE, etc. En caso de
utilizar POST o PUT, por ejemplo, se puede enviar un objeto en otro parmetro a la
misma funcin llamado data. Ej: data: {'clave': 'valor'},.
En este ejemplo pas a la funcin AJAX 2 funciones: success y error; Estas son llamadas
cuando el request fue exitoso o fall respectivamente.
ATAJOS
Adicionalmente a la funcin AJAX, jQuery provee otras funciones para usos ms especficos y
ahorrarnos escribir unas cuantas lineas de cdigo.
$.get()
$.get() realiza una llamada GET a una direccin especifica:
$.get( "http://myURL.com/", function() {
alert( "Funcion" );
})
.done(function() {
alert( "Tambin sirve para saber que funcion" );
})
.fail(function() {
alert( "Ha ocurrido un error" );
});
La funcin $.get() solo provee una funcin una funcin para saber que la operacin fue exitosa.
Esto es mas o menos equivalente a:
$.ajax({
url: "http://myURL.com/",
type: 'GET',
success: function() {
alert( "Funcion" );
},
error: function() {
alert( "Ha ocurrido un error" );
}
});
$.getJSON()
Esta es muy similar a la anterior, solo que es especifica para cuando se espera una respuesta
tipo json.
En caso de esperar jsonp, se debe agregar 'callback=?' a la url:
$.getJSON( "http://api.openweathermap.org/data/2.1/weather/city/caracas?callback=?",
function() {
alert( "Exito" );
});
$.ajax({
url: "http://api.openweathermap.org/data/2.1/weather/city/caracas",
type: 'GET',
dataType: 'jsonp',
success: function() {
alert( "Exito" );
}
});
$.getScript()
Carga un un archivo Javascript de una direccin especifica.
$.getScript( "http://myURL.com/ajax/myScript.js", function( data, textStatus, jqxhr ) {
alert( "Exito" );
});
Es equivalente a:
$.ajax({
url: "http://myURL.com/ajax/myScript.js",
dataType: "script",
success: function( data, textStatus, jqxhr ) {
alert( "Exito" );
}
});
$.post()
Realiza una llamada POST a una direccin URL:
$.post( "http://myURL.com/usuario", {'nombre': 'Oscar'}, function( data, textStatus, jqxhr ) {
alert( "Exito" );
});
Esta funcin puede recibir como parmetro un objeto con los valores a enviar.
Es equivalente a:
$.ajax({
url: "http://myURL.com/usuario",
type: "POST",
success: function( data, textStatus, jqxhr ) {
alert( "Exito" );
}
});
$.load()
Carga una direccin url y coloca los datos retornados en los elementos seleccionados (Con un
ejemplo se entender mejor...).
$('body').load( "http://myURL.com/public/prueba.txt" );
El contenido del archivo "prueba.txt" sera agregado al body de la pgina web.
Eventos Globales
Por ltimo, jQuery ofrece una serie de funciones que responden a eventos de AJAX. Estas
funciones no deben ser invocadas manualmente, se invocan automticamente cuando se
dispara su evento correspondiente.
$.ajaxComplete()
Es llamada cuando una funcin AJAX es completada
$( document ).ajaxComplete(function() {
alert('Ajax completado');
});
Si se necesita saber de que url viene:
$( document ).ajaxComplete(function( event, xhr, settings ) {
alert('Ajax completado desde ' + settings.url);
});
$.ajaxError()
Es llamada cuando una funcin AJAX es completada pero con errores
$( document ).ajaxError(function() {
alert('Ajax Error');
});
$.ajaxSend()
Se invoca cuando un AJAX es enviado
$( document ).ajaxSend(function() {
alert('Ajax enviado');
});
$.ajaxStart()
jQuery lleva un control de todas las llamadas AJAX que ejecutas. Si ninguna esta en curso esta
funcin es invocada.
$( document ).ajaxStart(function() {
alert('Ajax Iniciando');
});
$.ajaxStop()
Esta se invoca cada vez que una funcin AJAX es completada y an quedan otras en curso.
Incluso es invocada cuando la ltima funcin AJAX es cancelada.
$( document ).ajaxStop(function() {
alert('Ajax Stop');
});
$.ajaxSuccess()
Este es invocado cuando una funcin AJAX termina exitosamente.
$( document ).ajaxSuccess(function() {
alert('Ajax Exitoso');
});
Conclusin
Con esto completamos esta serie sobre jQuery.
Gracias por leer y seguir atendiendo sus dudas por la seccin de comentarios de ms abajo.
Si esta informacin ha sido util, comprtela en las redes sociales y ayudamos a llegar a otras
personas que podran necesitarnos.
Hasta pronto.
function muestraMensaje() {
...
if(peticion_http.readyState == READY_STATE_COMPLETE) {
if(peticion_http.status == 200) {
// Si se ha recibido la respuesta del servidor, eliminar la cuenta atrs
clearTimeout(cuentaAtras);
...
}
}
}
function expirada() {
// La cuentra atrs se ha cumplido, detener la peticin HTTP pendiente
peticion_http.abort();
CDIGOS DE INFORMACIN
statu
s
statusText
Explicacin
100
Continue
101
Switching
protocols
statu
s
statusText
Explicacin
200
OK
statu
s
statusText
Explicacin
201
Created
202
Accepted
203
Non-Authoritative
Information
204
No Content
205
Reset Content
206
Partial Content
CDIGOS DE REDIRECCIN
statu
s
statusText
Explicacin
300
Multiple
Choices
301
Moved
Permanently
statu
s
statusText
Explicacin
Found
See Other
304
Not Modified
305
Use Proxy
307
Temporary
Redirect
302
303
statu
s
statusText
Explicacin
400
Bad Request
401
Unauthorized
402
Payment
statu
s
statusText
Explicacin
Required
Forbidden
404
Not Found
405
Method Not
Allowed
406
Not Acceptable
407
Proxy
Authentication
Required
408
Request Timeout
409
Conflict
Gone
403
410
statu
s
statusText
Explicacin
411
Length Required
412
Precondition
Failed
413
Request Entity
Too Large
414
Request-URI Too
Long
415
Unsupported
Media Type
416
Requested Range
Not Suitable
Expectation Failed
417
statu
s
statusText
Explicacin
500
Internal Server
statu
s
statusText
Explicacin
Error
la peticin
501
Not Implemented
502
Bad Gateway
503
Service
Unavailable
504
Gateway Timeout
505
Tabla de Contenidos
1. Ajax y Jquery.
2. Otras funciones Ajax
3. getScript
4. getJSON
5. Ejemplo load
Sesin 5 - Ajax.
Ajax.
Ajax, acrnimo de Asynchronous JavaScript And XML ( JavaScript asncrono y XML), es una
tcnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet
Applications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de los
url: 'ajax/test.html',
3.
success: function(data) {
4.
$('.result').html(data);
5.
6.
7. });
Quitando la opcin asincrona.
Observe el siguiente cdigo.
1. var datos = null;
2. $.ajax({
3.
url: 'ajax/test.html',
4.
success: function(data) {
5.
6.
datos = data;
}
7. });
8. console.log(datos);
url: 'ajax/test.html',
4.
//detiene la ejecucin.
5.
async : false,
6.
success: function(data) {
7.
8.
datos = data;
}
9. });
10. console.log(datos);
Otra opcin para esperar que ajax se haya ejecutado para realizar determinada accin seria
encaminar la funcion done como se muestra acontinuacin.
1. var datos = null;
2. $.ajax({
3.
url: 'ajax/test.html',
4.
success: function(data) {
5.
6.
datos = data;
}
7. }).done(function( msg ) {
8.
console.log(datos);}
9. );
10.
Ejemplo Manejando el error.
Si somos detallistas nos daremos cuenta que console.log(datos); no garantiza que los datos no
sean nulos, pues la respuesta puede llegar a fallar y en este caso tal vez deseamos rellenar a
datos con valores por defecto.
1. var datos = null;
2. $.ajax({
3.
url: 'ajax/test.html',
4.
success: function(data) {
5.
datos = data;
6.
7.
error: function() {
8.
9.
console.log(datos);}
12. );
13.
Tabla de Contendidos | Indice principal
Otras funciones Ajax
Existen otras funciones definidas para manejar respuestas asincronas para una detallado mas
extenso se recomienda consultar la categoriaAjax de la api de jQuery:
Tabla de Contendidos | Indice principal
getScript
Es una funcin ajax de jQuery equivalente a:
1. $.ajax({
2.
url: url,
3.
dataType: "script",
4.
success: success
5. });
A partir de jQuery 1.5 puedes ocupar la funcin .fail() para detectar y manejar errores.
1. $.getScript("ajax/test.js")
2. .done(function(script, textStatus) {
3.
4. })
5. .fail(function(jqxhr, settings, exception) {
6.
7. });
8.
Ejemplo - getScript
Tabla de Contendidos | Indice principal
getJSON
Esta funcin es en particular muy util ya que varios servicios por Internet nos brindan una API y
por lo regular los datos son enviados en formato json.
http://api.jquery.com/jQuery.getJSON/
Ejemplo - getJson y la API de youtube
Ejemplo - getJson y la API de Flickr
Ejemplo - getJson y la API de twitter
Tabla de Contendidos | Indice principal
Ejemplo load
Entre las funciones que ofrece jQuery para el control asincrono esta la funcin load dicha
funcin se encarga de cargar algun contenido obtenido desde alguna url, para entender mejor
esta funcin observe el siguiente esquema:
que hagan click sobre el botn identificado como algunBoton, bien ahora veamos como
quedaria este ejemplo:
textpop-up
1. //relacionamos el evento click del boton #algunBoton
2. $('#algunBoton').click(function(event) {
3.
4.
// Notar que el parametro que recibe puede ser una url absoluta o un ruta
refenenciada.
5.
$('#elementoDinamico').load('file.html');
6.
7.
event.preventDefault();
8. });
9.
Contenido dinamico
Este contenido existe dentro del documento con nombre file.html
Probar ejemplo: algunBoton
Description
$.ajax()
$.ajaxPrefilter()
$.ajaxSetup()
$.ajaxTransport()
$.get()
$.getJSON()
$.getScript()
$.param()
$.post()
ajaxComplete()
ajaxError()
ajaxSend()
ajaxStart()
ajaxStop()
ajaxSuccess()
load()
serialize()
serializeArray()
$("button").click(function(){
$.getJSON("demo_ajax_json.js", function(result){
$.each(result, function(i, field){
$("div").append(field + " ");
});
});
});
Try it Yourself
Syntax
$(selector).getJSON(url,data,success(data,status,xhr))
Parameter
Description
url
data
success
(data,status,xhr)
$('form').on('submit', uploadFiles);
// Catch the form submit and upload the files
function uploadFiles(event)
{
event.stopPropagation(); // Stop stuff happening
event.preventDefault(); // Totally stop stuff happening
// START A LOADING SPINNER HERE
What this function does is create a new formData object and appends each file to it. It then
passes that data as a request to the server. 2 attributes need to be set to false:
processData - Because jQuery will convert the files arrays into strings and the server
can't pick it up.
contentType - Set this to false because jQuery defaults toapplication/x-www-formurlencoded and doesn't send the files. Also setting it to multipart/form-data doesn't seem
to work either.
3. Upload the files
Quick and dirty php script to upload the files and pass back some info:
// You need to add server side validation and better error handling here
$data = array();
if(isset($_GET['files']))
{
$error = false;
$files = array();
$uploaddir = './uploads/';
foreach($_FILES as $file)
{
if(move_uploaded_file($file['tmp_name'], $uploaddir .basename($file['name'])))
{
$files[] = $uploaddir .$file['name'];
}
else
{
$error = true;
}
}
$data = ($error) ? array('error' => 'There was an error uploading your files') : array('files' =>
$files);
}
else
{
$data = array('success' => 'Form was submitted', 'formData' => $_POST);
}
echo json_encode($data);
});
}
<!Fin del Codig -- >
FINAL NOTE
This script is an example only, you'll need to handle both server and client side validation and
some way to notify users that the file upload is happening. I made a project for it on Github if
you want to see it working.
If you have comments you can tweet me on @abbandunne