{"id":266,"date":"2013-06-21T10:02:57","date_gmt":"2013-06-21T16:02:57","guid":{"rendered":"http:\/\/behstant.com\/blog\/?p=266"},"modified":"2015-10-15T15:36:15","modified_gmt":"2015-10-15T21:36:15","slug":"uso-de-ajax-con-jquery","status":"publish","type":"post","link":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/","title":{"rendered":"Uso de Ajax con jQuery"},"content":{"rendered":"<p>Mucho se ha hablado sobre el uso de Ajax en la Web moderna, para muchos esto parece algo tan complejo que mejor prefieren estar trabajando su aplicaciones web en una forma tradicional, claro, Ajax es algo complicado porque nos permite tener interacci\u00f3n con el servidor de una manera tan din\u00e1mica que no necesitamos recargar nuestro sitio Web completo para obtener una respuesta.<\/p>\n<p>Antes de hablar de Ajax de jQuery voy a dar un antecedente de lo que es Ajax, porque si no sabemos de d\u00f3nde viene no podemos comprender su uso. Una vez que entendamos como funciona Ajax, mostrare su uso a trav\u00e9s de la librer\u00eda jQuery, el cual es nuestro objetivo.<\/p>\n<p><strong style=\"font-size: 24px;\">AJAX<\/strong><\/p>\n<p>Ajax es un t\u00e9rmino acu\u00f1ado por Jesse Garrett de Adaptive Path para explicar la comunicaci\u00f3n as\u00edncrona entre cliente-servidor. El significado del Acr\u00f3nimo Ajax es &#8220;Asynchronous Javascript and XML&#8221;, Ajax se simplemente un t\u00e9rmino para encapsular las t\u00e9cnicas necesarias para crear una aplicaci\u00f3n web.<\/p>\n<p><!--more--><\/p>\n<p>No se necesita mucho c\u00f3digo para hacer una petici\u00f3n de Ajax, el aspecto m\u00e1s importante de Ajax es la petici\u00f3n HTTP del proceso. El env\u00edo de informaci\u00f3n as\u00edncrona al servidor y recibir informaci\u00f3n adicional de regreso es ultimo prop\u00f3sito de Ajax.<\/p>\n<p><strong style=\"font-size: 24px;\">UN EJEMPLO PR\u00c1CTICO DEL USO DE AJAX<\/strong><\/p>\n<pre class=\"brush: javascript; gutter: true\">function obtenerInformacion() {\r\n\t\t\/\/ If IE is used, create a wrapper for the XMLHttpRequest object\r\n\t\tif ( typeof XMLHttpRequest == &quot;undefined&quot;)\r\n\t\t\tXMLHttpRequest = function() {\r\n\t\t\t\t\/\/ Internet Explorer uses an ActiveXObject to create a new\r\n\t\t\t\t\/\/ XMLHttpRequest object\r\n\t\t\t\treturn new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);\r\n\t\t\t};\r\n\t\t\/\/ creamos el objecto de peticion\r\n\t\tvar xmlHttpRequestObject = new XMLHttpRequest();\r\n\t\t\/\/ abrimos nuestro socket\r\n\t\txmlHttpRequestObject.open(&quot;GET&quot;, &quot;server.html&quot;, true);\r\n\t\t\/\/ establece la conexion con el servidor y envia informacion adicional\r\n\t\txmlHttpRequestObject.send();\r\n\r\n\t\t\/\/ ver cuando el estado del documento este actualizado\r\n\t\txmlHttpRequestObject.onreadystatechange = function() {\r\n\t\t\t\/\/ Wait until the data is fully loaded\r\n\t\t\tif (xmlHttpRequestObject.readyState == 4) {\r\n\t\t\t\tif( httpSuccess(xmlHttpRequestObject) ) {\r\n\t\t\t\t\t\/\/ xmlHttpRequestObject.responseXML contiene el documento XML (Si se regreso alguno).\r\n\t\t\t\t\t\/\/ xmlHttpRequestObject.responseText contiene el texto de respuesta(Si no se obtuvo un documento XML).\r\n\t\t\t\t\tvar resultado = document.getElementById(&quot;resultado&quot;);\r\n\t\t\t\t\tresultado.innerHTML = xmlHttpRequestObject.responseText;\r\n\t\t\t\t} else {\r\n\t\t\t\t\talert(&quot;Sucedio un problema al realizar la respuesta del servidor.&quot;)\r\n\t\t\t\t}\t\t\t\t\r\n\t\t\t\t\/\/ Limpiar despues de haber terminado para evitar fugas de memoria\r\n\t\t\t\txmlHttpRequestObject = null;\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\t\/\/ Determina el exito de la respuesta XML\r\n\tfunction httpSuccess(r) {\r\n\t\ttry {\r\n\t\t\t\/\/ Si no se brindo un estatus, y estamos solicitando\r\n\t\t\t\/\/ un archivo local, entonces fue existoso\r\n\t\t\treturn !r.status &amp;&amp; location.protocol == &quot;file:&quot; ||\r\n\t\t\t\/\/ cualquier estatus en el rango de 200 esta bien.\r\n\t\t\t(r.status &gt;= 200 &amp;&amp; r.status &lt; 300 ) ||\r\n\t\t\t\/\/ Exitoso si el documento no fue modificado\r\n\t\t\tr.status == 304 ||\r\n\t\t\t\/\/ Safari regresa un estatus vacio si el archivo no fue modificado\r\n\t\t\tnavigator.userAgent.indexOf(&quot;Safari&quot;) &gt;= 0 &amp;&amp; typeof r.status == &quot;undefined&quot;;\r\n\t\t} catch(e) {\r\n\t\t}\r\n\t\t\/\/ Si la revision del estatus fallo, entonces asumimos que la peticion tambien fallo.\r\n\t\treturn false;\r\n\t}<\/pre>\n<p>HTML que lo utiliza<\/p>\n<pre>&lt;button onClick=&quot;obtenerInformacion();&quot;&gt;Obtener un documento&lt;\/button&gt;\r\n\t&lt;p&gt;&lt;span id=&quot;resultado&quot;&gt; &lt;\/span&gt;&lt;\/p&gt;<\/pre>\n<p>Puedo compartir un estudio m\u00e1s profundo sobre el uso de Ajax a nivel nativo para aquellos usuarios que est\u00e9n interesados, sin embargo, este no es el objetivo del tema, el objetivo es poder trabajar con Ajax en jQuery. De acuerdo al ejemplo anteriormente mostrado nos podemos dar cuenta de que parece algo cansado el tener que estar revisando el tipo de navegador que usamos y como debemos de reaccionar ante ello, pero esto es solo el principio, para que nuestra aplicaci\u00f3n Ajax pueda funcionar en su totalidad en diferentes browser tenemos que hacer mucho mas validaciones para que nuestra aplicaci\u00f3n pueda funcionar y no solo a un explorador especifico.<\/p>\n<p>Tenemos dos opciones:<\/p>\n<ol>\n<li>\u00a0Ponernos a hacer nuestras funciones para validar los browser y hacer funciones gen\u00e9ricas con Javascript Nativo.<\/li>\n<li>\u00a0Hacer uso de un framework que ya tiene todas las validaciones implementadas como es jQuery.<\/li>\n<\/ol>\n<p>Alguien flojo dir\u00eda, yo uso el framework, para que hago todas las funciones, pero que tal si te digo que tu c\u00f3digo eventualmente necesitara fixes para que funcione correctamente si lo haces todo por tu cuenta? No te quito el cr\u00e9dito si lo haces pero personalmente creo que hacer uso del framework de jQuery es tener la certeza de que muchos desarrolladores ya han trabajado en todos estos fixes y han hecho que el c\u00f3digo funcione en casi todos los browsers. Ahora al usar el framework no es que seas flojo, es que eres sabio porque sabes que tu c\u00f3digo va a funcionar y te vas a enfocar en hacer una mejor aplicaci\u00f3n web.<\/p>\n<p>Para mi opini\u00f3n, al realizar aplicaciones web es cr\u00edtico que me enfoque en c\u00f3mo voy a realizarla y con qu\u00e9 \u00a0herramientas cuento. Por eso hago este tutorial con las funciones m\u00e1s generales de Ajax en jQuery.<\/p>\n<p>Como pudimos observar en el ejemplo anterior, usamos una funci\u00f3n\u00a0<code>httpSuccess ()<\/code>que se encarga de verificar que nuestra petici\u00f3n haya tenido \u00e9xito, esta y muchas funciones mas podemos crear para trabajar con nuestras peticiones Ajax, as\u00ed que John Resig (El creador de jQuery) y su equipo se han encargado en empaquetar estas funciones para nuestro uso, las funciones y m\u00e9todos que se usan son:<\/p>\n<div class=\"quote\">\n<p><strong>Manejadores Globales de Ajax<\/strong><\/p>\n<pre>.ajaxComplete() \r\n.ajaxError()\r\n.ajaxSend()\r\n.ajaxStart()\r\n.ajaxStop() \r\n.ajaxSuccess()\r\njQuery.param()<\/pre>\n<p><strong>Interface de Bajo-Nivel<\/strong><\/p>\n<pre>jQuery.ajax()\r\njQuery.ajaxPrefilter()\r\njQuery.ajaxSetup()\r\njQuery.ajaxTransport()<\/pre>\n<p><strong>M\u00e9todos de Acceso R\u00e1pido<\/strong><\/p>\n<pre>jQuery.get()\r\njQuery.getJSON()\r\njQuery.getScript()\r\njQuery.post()\r\n.load()<\/pre>\n<p><strong>Funciones de Ayuda<\/strong><\/p>\n<pre>.serialize()\r\n.serializeArray()<\/pre>\n<\/div>\n<p>De cada una de estas funciones y m\u00e9todos se desencadenan m\u00e1s opciones pero para esta parte del tutorial vamos \u00a0a utilizar dos:<\/p>\n<div class=\"quote\">\n<p><strong>Forma Simple<\/strong><\/p>\n<p>.load()<\/p>\n<p><strong>Forma Compleja<\/strong><\/p>\n<p>jQuery.ajax() \u00f3 $.ajax()<\/p>\n<\/div>\n<p><strong style=\"font-size: 24px;\">jQuery.load()<\/strong><\/p>\n<p>Carga informaci\u00f3n del servidor y fija el HTML regresado en el elemento encontrado. Este m\u00e9todo podemos llamarle un \u00a0m\u00e9todo m\u00e1s gen\u00e9rico por que nos carga todo el contenido que estemos solicitando de un sitio. Este m\u00e9todo toma 3 \u00a0argumentos:<\/p>\n<div class=\"quote\">\n<p><strong>url<\/strong>: Una cadena que tiene el URL al cual se le est\u00e1 haciendo la petici\u00f3n.<\/p>\n<p><strong>data<\/strong>: Un objeto plano o una cadena que es enviada al servidor con la petici\u00f3n.<\/p>\n<p><strong>complete<\/strong>: Una funci\u00f3n callback que se ejecuta cuando la petici\u00f3n se ha completado, complete como es una funci\u00f3n tambi\u00e9n tiene par\u00e1metros (responseText, textStatus, XMLHttpRequest) que se pueden usar posteriormente para \u00a0hacer mas validaciones.<\/p>\n<\/div>\n<p>Y para entrar m\u00e1s en materia vamos a comenzar con un ejemplo pr\u00e1ctico.<\/p>\n<p>CARGAR CONTENIDO DE UNA PAGINA WEB EXTERNA<br \/>\nPor cuestiones de segurida en Ajax, no se puede (debe) cargar contenido de otro dominio del cual se esta haciendo la petici\u00f3n. Sin embargo para este ejemplo cargo el contenido de una p\u00e1gina que tengo en mi sitio y que tiene integrado un iframe.<\/p>\n<p><button class=\"exampleLoad01\">Cargar<\/button> \u00a0 <img decoding=\"async\" class=\"spiner01\" src=\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\" alt=\"Cargando ...\" \/><\/p>\n<div class=\"loadedContent01\" style=\"border: 1px solid #000000; display: none; width: 0px; margin-left: auto; margin-right: auto;\"><\/div>\n<p>&nbsp;<\/p>\n<p>El c\u00f3digo con el que hago la petici\u00f3n es el siguiente:<\/p>\n<pre class=\"brush: javascript; gutter: true\">jQuery(function($) {\r\n\r\n$(&#039;div.loadedContent01&#039;).load(&quot;iframe.php&quot;,showLoadDiv);\r\n\r\nfunction showLoadDiv() {\r\n\t$(&#039;div.loadedContent01&#039;).show()\r\n\t\t.animate({\r\n\t\t\twidth: &quot;95%&quot;\r\n\t\t},&quot;fast&quot;)\r\n\t\t.animate({\r\n\t\t\theight: &quot;380px&quot;\r\n\t\t},&quot;slow&quot;,&quot;easeOutExpo&quot;);\r\n\t\/\/ hide the spinner since the data is already loaded\r\n\t$(&#039;.spiner01&#039;).hide(&quot;slow&quot;);\r\n}\r\n\r\n});<\/pre>\n<p><strong style=\"font-size: 24px;\">jQuery.ajax()<\/strong><\/p>\n<p>Realiza una petici\u00f3n as\u00edncrona HTTP (Ajax). Este m\u00e9todo recibe dos parametros, de los cuales, el segundo se descompone en una serie de propiedades para configurar la petici\u00f3n.<\/p>\n<div class=\"quote\">\n<p><strong>url<\/strong>Una cadena que contiene la URL a donde se hace la petici\u00f3n.<\/p>\n<p><strong>settings<\/strong> Un set de propiedad\/valor que configura la petici\u00f3n Ajax.<\/p>\n<\/div>\n<p>Ya que settings esta compuesto de varias propiedades, a continuaci\u00f3n las listo:<\/p>\n<div class=\"quote\">\n<table style=\"border-collapse: collapse; display: block; margin-left: auto; margin-right: auto; width: 476px;\" border=\"1\">\n<tbody>\n<tr>\n<td class=\"padding-one alignCenter-one\">accepts<\/td>\n<td class=\"padding-one alignCenter-one\">contents<\/td>\n<td class=\"padding-one alignCenter-one\">dataFilter<\/td>\n<td class=\"padding-one alignCenter-one\">isLocal<\/td>\n<td class=\"padding-one alignCenter-one\">scriptCharset<\/td>\n<td class=\"padding-one alignCenter-one\">url<\/td>\n<\/tr>\n<tr>\n<td class=\"padding-one alignCenter-one\">async<\/td>\n<td class=\"padding-one alignCenter-one\">contentType<\/td>\n<td class=\"padding-one alignCenter-one\">dataType<\/td>\n<td class=\"padding-one alignCenter-one\">jsonp<\/td>\n<td class=\"padding-one alignCenter-one\">statusCode<\/td>\n<td class=\"padding-one alignCenter-one\">username<\/td>\n<\/tr>\n<tr>\n<td class=\"padding-one alignCenter-one\"><\/td>\n<td class=\"padding-one alignCenter-one\">context<\/td>\n<td class=\"padding-one alignCenter-one\">error<\/td>\n<td class=\"padding-one alignCenter-one\">jsonpCallback<\/td>\n<td class=\"padding-one alignCenter-one\">success<\/td>\n<td class=\"padding-one alignCenter-one\">xhr<\/td>\n<\/tr>\n<tr>\n<td class=\"padding-one alignCenter-one\">beforeSend<\/td>\n<td class=\"padding-one alignCenter-one\">converters<\/td>\n<td class=\"padding-one alignCenter-one\">global<\/td>\n<td class=\"padding-one alignCenter-one\">mimeType<\/td>\n<td class=\"padding-one alignCenter-one\">timeout<\/td>\n<td class=\"padding-one alignCenter-one\">xhrFields<\/td>\n<\/tr>\n<tr>\n<td class=\"padding-one alignCenter-one\">cache<\/td>\n<td class=\"padding-one alignCenter-one\">crossDomain<\/td>\n<td class=\"padding-one alignCenter-one\">headers<\/td>\n<td class=\"padding-one alignCenter-one\">password<\/td>\n<td class=\"padding-one alignCenter-one\">traditional<\/td>\n<td class=\"padding-one alignCenter-one\"><\/td>\n<\/tr>\n<tr>\n<td class=\"padding-one alignCenter-one\">complete<\/td>\n<td class=\"padding-one alignCenter-one\">data<\/td>\n<td class=\"padding-one alignCenter-one\">ifModified<\/td>\n<td class=\"padding-one alignCenter-one\">processData<\/td>\n<td class=\"padding-one alignCenter-one\">type<\/td>\n<td class=\"padding-one alignCenter-one\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Son demasiadas opciones para diferentes tipos de casos, pero voy a describir los que se usan generalmente:<\/p>\n<div class=\"quote\">\n<p><strong>data<\/strong>\u00a0Tipo: Objeto Plano o Cadena. La informaci\u00f3n que va a ser enviada al servidor. Es convertida en un query string. Es agregada la url para peticiones-GET. Ver la opci\u00f3n <code>proceesData<\/code> para prevenir este proceso autom\u00e1tico. El Objeto de de ser un par de llave\/valor. Si valor es un arreglo, jQuery serializa los valores m\u00faltiples con la misma llave basado en el valor de la configuraci\u00f3n <code>traditional<\/code>.<\/p>\n<p><strong>dataType<\/strong> Tipo: Cadena. Por default jQuery intenta hacer un reconocimiento inteligente (xml, json, script, o html). El tipo de dato que tu est\u00e1s esperando de respuesta del servidor. jQuery va a tratar de reconocer la respuesta basado en el MIME type de la respuesta (un tipo MIME XML devolvera un XML, en JSON 1.4 responder\u00e1 un objeto de Javascript, en 1.4 el script se ejectur\u00e1 y todo lo dem\u00e1s ser\u00e1 devuelto como una cadena.<\/p>\n<p><strong>type<\/strong> Tipo: Cadena. El tipo de peticion a hacer (&#8220;POST&#8221; \u00f3 &#8220;GET&#8221;), por default es &#8220;GET&#8221;. <strong>Nota:<\/strong> Otros tipo de peticiones HTTP como PUT o DELETE se pueden utilizar. Pero no todos los exploradores los soportan.<\/p>\n<p><strong>url<\/strong> Tipo: Cadena. Una cadena que contiene la URL a donde se hace la peteci\u00f3n.<\/p>\n<p><strong>success<\/strong> Tipo: Funci\u00f3n ( PlainObject data, String textStatus, jqXHR jqXHR ). Es una funci\u00f3n que es llamada cuando la petici\u00f3n se realiz\u00f3 con \u00e9xito. La funci\u00f3n recibe tres argumentos: La informaci\u00f3n que regresa el servidor, un parametro formateado de acuerdo al <code>datatype<\/code>, una cadena describiendo el estatus, y el objeto jqXHR (en jQuery 1.4.x, XMLHttpRequest).<\/p>\n<p><strong>error<\/strong> Tipo: Funci\u00f3n ( jqXHR jqXHR, String textStatus, String errorThrown ). Una funci\u00f3n que es llamada en caso de que la petici\u00f3n falle. La funci\u00f3n recibe 3 argumentos. El objeto jqXHR (en jQuery1.4.x,XMLHttpRequest), una cadena describiendo el tipo de error que ocurrio y un objecto de excepci\u00f3n, si alguno ocurrio. Los posibles valores para el segundo argumento (aparte de null) son <code> \"timeout\", \"error\", \"abort\", y \"parsererror\"<\/code>. Cuando haya errores de HTTP <code>errorThrown<\/code> recibe la posici\u00f3n textual del estado de HTTP, como &#8220;Not Found&#8221; o &#8220;Internal Server Error&#8221;.<\/p>\n<\/div>\n<p>Ahora para mostrar un ejemplo del uso de <strong>jQuery.ajax()<\/strong>\u00a0voy a mostrar un ejemplo donde hago una petici\u00f3n al servidor preguntando si un alumno esta con el curso aprobado. Para saber si el curso se aprob\u00f3 la calificaci\u00f3n debe de ser mayo que 6, si est\u00e1 en el rango de 9 a 10 es excelente y reprobado menor que 6.<\/p>\n<div class=\"quote\">\n<p><input class=\"value1\" type=\"text\" \/>\u00a0<button class=\"exampleLoad02\">Mostrar Estatus<\/button>\u00a0<img decoding=\"async\" class=\"spiner01\" src=\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\" alt=\"Cargando ...\" \/><\/p>\n<p class=\"loadedContent02\">Estatus:<\/p>\n<\/div>\n<p>El c\u00f3digo con el cual hago la petici\u00f3n Ajax es el siguiente:<\/p>\n<pre class=\"brush: javascript; gutter: true\">$.ajax({\r\n\turl: &quot;includes\/php\/getScore.php&quot;,\r\n\tdata: &quot;score=&quot;+$(&#039;.value1&#039;).val(),\r\n\ttype: &quot;get&quot;,\r\n\tsuccess: function(response) {\r\n\t\t$(&#039;.loadedContent02 span&#039;).text(response);\r\n\t},\r\n\tcomplete: function() {\r\n\t\t$(&#039;.spiner01&#039;).hide();\r\n\t}\r\n});<\/pre>\n<p>Como podemos observar podemos controlar muchas de las acciones que se realizan al hacer una petici\u00f3n al servidor. Muchos pensaran que esto es para gente floja, pero en realidad si se analiza lo que realmente hace el c\u00f3digo por nosostros, veremos que realmente es una gran herramienta y que en realidad debemos de preocuparnos por realizar grandes aplicaciones web como <a title=\"Visitar SoundCloud\" href=\"http:\/\/soundcloud.com\" target=\"_blank\">soundcloud<\/a>, <a title=\"Visitar Dropbox\" href=\"https:\/\/www.dropbox.com\/\" target=\"_blank\">dropbox<\/a>, <a title=\"Visitar Google\" href=\"http:\/\/google.com\" target=\"_blank\">google<\/a>, <a title=\"Visitar Grooveshark\" href=\"http:\/\/grooveshark.com\/\" target=\"_blank\">grooveshark<\/a>, etc.<\/p>\n<p>Despu\u00e9s de haber le\u00eddo el libro Pro Javascript Technichs de John Resig (creador de jQuery) comprend\u00ed el gran esfuerzo que lleva realizar el m\u00e9todo Ajax que he utilizado en este tutorial y que el API est\u00e1 ah\u00ed para que nosotros seamos capaces de realizar mas cosas.<\/p>\n<p>Queda de ustedes realizar cosas innovadoras y compartirlas con el mundo. Si tienen dudas y comentarios no duden en hacerlo aqu\u00ed en el post. Y como ya es costumbre pueden descargar el c\u00f3digo fuente desde aqu\u00ed<\/p>\n\t<form id=\"edd_purchase_1110\" class=\"edd_download_purchase_form edd_purchase_1110\" method=\"post\">\n\n\t\t\n\t\t<div class=\"edd_purchase_submit_wrapper\">\n\t\t\t<button class=\"edd-add-to-cart button-cart blue edd-submit\" data-nonce=\"06519b1bd6\" data-timestamp=\"1780622559\" data-token=\"e528db8272112966a7473cfc0990a5b3d93b0c856c26b25d2d7dc62158ae8395\" data-action=\"edd_add_to_cart\" data-download-id=\"1110\" data-variable-price=\"no\" data-price-mode=single data-price=\"0.00\" ><span class=\"edd-add-to-cart-label\">Free&nbsp;&ndash;&nbsp;Purchase<\/span> <span class=\"edd-loading\" aria-label=\"Loading\"><\/span><\/button><input type=\"submit\" class=\"edd-add-to-cart edd-no-js button-cart blue edd-submit\" name=\"edd_purchase_download\" value=\"Free&nbsp;&ndash;&nbsp;Purchase\" data-action=\"edd_add_to_cart\" data-download-id=\"1110\" data-variable-price=\"no\" data-price-mode=single \/><a href=\"http:\/\/behstant.com\/blog\/checkout\/\" class=\"edd_go_to_checkout button-cart blue edd-submit\" style=\"display:none;\">Checkout<\/a>\n\t\t\t\t\t\t\t<span class=\"edd-cart-ajax-alert\" aria-live=\"assertive\">\n\t\t\t\t\t<span class=\"edd-cart-added-alert\" style=\"display: none;\">\n\t\t\t\t\t\t<svg class=\"edd-icon edd-icon-check\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t<path d=\"M26.11 8.844c0 .39-.157.78-.44 1.062L12.234 23.344c-.28.28-.672.438-1.062.438s-.78-.156-1.06-.438l-7.782-7.78c-.28-.282-.438-.673-.438-1.063s.156-.78.438-1.06l2.125-2.126c.28-.28.672-.438 1.062-.438s.78.156 1.062.438l4.594 4.61L21.42 5.656c.282-.28.673-.438 1.063-.438s.78.155 1.062.437l2.125 2.125c.28.28.438.672.438 1.062z\"\/>\n\t\t\t\t\t\t<\/svg>\n\t\t\t\t\t\tAdded to cart\t\t\t\t\t<\/span>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/div><!--end .edd_purchase_submit_wrapper-->\n\n\t\t<input type=\"hidden\" name=\"download_id\" value=\"1110\">\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"edd_action\" class=\"edd_action_input\" value=\"add_to_cart\">\n\t\t\n\t\t\n\t\t\n\t<\/form><!--end #edd_purchase_1110-->\n\t\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mucho se ha hablado sobre el uso de Ajax en la Web moderna, para muchos esto parece algo tan complejo que mejor prefieren estar trabajando su aplicaciones web en una forma tradicional, claro, Ajax es algo complicado porque nos permite tener interacci\u00f3n con el servidor de una manera tan din\u00e1mica que no necesitamos recargar nuestro &#8230; <a title=\"Uso de Ajax con jQuery\" class=\"read-more\" href=\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\" aria-label=\"Read more about Uso de Ajax con jQuery\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[25],"tags":[58,43,67,64,69],"class_list":["post-266","post","type-post","status-publish","format-standard","hentry","category-jquery","tag-ajax","tag-javascript-2","tag-jquery","tag-tutoriales","tag-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Uso de Ajax con jQuery &#187; The Code<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uso de Ajax con jQuery &#187; The Code\" \/>\n<meta property=\"og:description\" content=\"Mucho se ha hablado sobre el uso de Ajax en la Web moderna, para muchos esto parece algo tan complejo que mejor prefieren estar trabajando su aplicaciones web en una forma tradicional, claro, Ajax es algo complicado porque nos permite tener interacci\u00f3n con el servidor de una manera tan din\u00e1mica que no necesitamos recargar nuestro ... Read more\" \/>\n<meta property=\"og:url\" content=\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\" \/>\n<meta property=\"og:site_name\" content=\"The Code\" \/>\n<meta property=\"article:published_time\" content=\"2013-06-21T16:02:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-10-15T21:36:15+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\" \/>\n<meta name=\"author\" content=\"Reedyseth\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Reedyseth\" \/>\n<meta name=\"twitter:site\" content=\"@Reedyseth\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Reedyseth\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\"},\"author\":{\"name\":\"Reedyseth\",\"@id\":\"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f\"},\"headline\":\"Uso de Ajax con jQuery\",\"datePublished\":\"2013-06-21T16:02:57+00:00\",\"dateModified\":\"2015-10-15T21:36:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\"},\"wordCount\":1556,\"commentCount\":2,\"image\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\",\"keywords\":[\"Ajax\",\"Javascript\",\"jQuery\",\"Tutoriales\",\"Tutorials\"],\"articleSection\":[\"jQuery\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\",\"url\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\",\"name\":\"Uso de Ajax con jQuery &#187; The Code\",\"isPartOf\":{\"@id\":\"https:\/\/behstant.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage\"},\"image\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\",\"datePublished\":\"2013-06-21T16:02:57+00:00\",\"dateModified\":\"2015-10-15T21:36:15+00:00\",\"author\":{\"@id\":\"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f\"},\"breadcrumb\":{\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage\",\"url\":\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\",\"contentUrl\":\"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/behstant.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uso de Ajax con jQuery\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/behstant.com\/blog\/#website\",\"url\":\"https:\/\/behstant.com\/blog\/\",\"name\":\"The Code\",\"description\":\"Learn Web Solutions in WordPress, PHP, jand also purchase code solutions.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/behstant.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f\",\"name\":\"Reedyseth\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g\",\"caption\":\"Reedyseth\"},\"description\":\"My Google Profile+\",\"sameAs\":[\"http:\/\/behstant.com\"],\"url\":\"http:\/\/behstant.com\/blog\/author\/reedyseth\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Uso de Ajax con jQuery &#187; The Code","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/","og_locale":"en_US","og_type":"article","og_title":"Uso de Ajax con jQuery &#187; The Code","og_description":"Mucho se ha hablado sobre el uso de Ajax en la Web moderna, para muchos esto parece algo tan complejo que mejor prefieren estar trabajando su aplicaciones web en una forma tradicional, claro, Ajax es algo complicado porque nos permite tener interacci\u00f3n con el servidor de una manera tan din\u00e1mica que no necesitamos recargar nuestro ... Read more","og_url":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/","og_site_name":"The Code","article_published_time":"2013-06-21T16:02:57+00:00","article_modified_time":"2015-10-15T21:36:15+00:00","og_image":[{"url":"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif","type":"","width":"","height":""}],"author":"Reedyseth","twitter_card":"summary_large_image","twitter_creator":"@Reedyseth","twitter_site":"@Reedyseth","twitter_misc":{"Written by":"Reedyseth","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#article","isPartOf":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/"},"author":{"name":"Reedyseth","@id":"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f"},"headline":"Uso de Ajax con jQuery","datePublished":"2013-06-21T16:02:57+00:00","dateModified":"2015-10-15T21:36:15+00:00","mainEntityOfPage":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/"},"wordCount":1556,"commentCount":2,"image":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage"},"thumbnailUrl":"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif","keywords":["Ajax","Javascript","jQuery","Tutoriales","Tutorials"],"articleSection":["jQuery"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/","url":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/","name":"Uso de Ajax con jQuery &#187; The Code","isPartOf":{"@id":"https:\/\/behstant.com\/blog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage"},"image":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage"},"thumbnailUrl":"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif","datePublished":"2013-06-21T16:02:57+00:00","dateModified":"2015-10-15T21:36:15+00:00","author":{"@id":"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f"},"breadcrumb":{"@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#primaryimage","url":"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif","contentUrl":"http:\/\/behstant.com\/blog\/wp-content\/uploads\/2013\/06\/ajax-loader.gif"},{"@type":"BreadcrumbList","@id":"http:\/\/behstant.com\/blog\/jquery\/uso-de-ajax-con-jquery\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/behstant.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Uso de Ajax con jQuery"}]},{"@type":"WebSite","@id":"https:\/\/behstant.com\/blog\/#website","url":"https:\/\/behstant.com\/blog\/","name":"The Code","description":"Learn Web Solutions in WordPress, PHP, jand also purchase code solutions.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/behstant.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/behstant.com\/blog\/#\/schema\/person\/760327e1ee480ad2aabe8e40d784ec9f","name":"Reedyseth","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/117af509aa15be89968fe955258a7bf8ed362ec2adf1afcf2af50a976f2349fa?s=96&r=g","caption":"Reedyseth"},"description":"My Google Profile+","sameAs":["http:\/\/behstant.com"],"url":"http:\/\/behstant.com\/blog\/author\/reedyseth\/"}]}},"_links":{"self":[{"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/posts\/266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/comments?post=266"}],"version-history":[{"count":0,"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/posts\/266\/revisions"}],"wp:attachment":[{"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/media?parent=266"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/categories?post=266"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/behstant.com\/blog\/wp-json\/wp\/v2\/tags?post=266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}