<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss">
<channel>
<title>AJAX - Tutoriales En Linea 🎓</title>
<link>https://tutorialesenlinea.es/</link>
<language></language><item>
<title>Ajax con JSON y PHP con JavaScript</title>
<link>https://tutorialesenlinea.es/2725-ajax-con-json-y-php-con-javascript.html</link>
<pdalink>https://tutorialesenlinea.es/2725-ajax-con-json-y-php-con-javascript.html</pdalink>
<guid>https://tutorialesenlinea.es/2725-ajax-con-json-y-php-con-javascript.html</guid>
<pubDate>Wed, 07 Aug 2019 19:24:20 +0200</pubDate>
<category>native-yes</category>

<enclosure url="https://tutorialesenlinea.es/uploads/posts/2019-08/thumbs/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" type="image/webp" />
<content:encoded><![CDATA[<a class="highslide" href="https://tutorialesenlinea.es/uploads/posts/2019-08/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" target="_blank"><img src="https://tutorialesenlinea.es/uploads/posts/2019-08/thumbs/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" alt="Ajax con jQuery, JSON y PHP: ejemplo paso a paso" class="fr-dib"></a>En el ultimo <a href="https://tutorialesenlinea.es/2724-ajax-con-jquery-json-y-php-ejemplo-paso-a-paso.html">tutoriales en linea anterior de Ajax</a> con jQuery, JSON y PHP. Hoy vengo con lo mismo pero sin jQuery, es decir, vamos a ver como trabajar con Ajax y JSON utilizando jаvascript puro, sin ningún framework ni biblioteca. Volvemos a los orígenes de tecnología Ajax: crear un objeto XMLHttpRequest con el que jаvascript puede comunicarse con el servidor de forma asíncrona intercambiando datos entre el cliente y el servidor sin interferir en el comportamiento actual de la página. Comúnmente, la respuesta desde servidor es utilizada para realizar manipulaciones posteriores en el DOM; por ejemplo, cambiar el contenido mostrado en la página.<br><br><h2>Construyendo el objeto XMLHttpRequest y enviando la solicitud</h2><br>El objeto XMLHttpRequest es el responsable de comunicarse con el servidor de forma asíncrona. Crear este objeto necesita, como mínimo, la URL que se va a solicitar al servidor, la cuál puede ser cualquier tipo de recurso, y no sólo XML (aunque su nombre sea XMLHttpRequest). Por ejemplo, la URL solicitada podría devolver HTML, JavaSript, CSS, texto plano, imágenes o, lo que nos ocupa en este tutorial, JSON.<br><br><h2>Ejemplo con método GET</h2><br>En el método GET, los parámetros de la solicitud se añaden a la URL como query string, es decir, se añade a la URL una cadena del tipo param1=value1&amp;param2=value2:<pre><code>// Definimos la URL que vamos a solicitar via Ajax var ajax_url = "http://mysite.com/json/data.json"; // Definimos los parámetros que vamos a enviar var params = "parametro=valor&amp;otro_parametro=otro_valor"; // Añadimos los parámetros a la URL ajax_url += '?' + params; // Creamos un nuevo objeto encargado de la comunicación var ajax_request = new XMLHttpRequest(); // Definimos como queremos realizar la comunicación ajax_request.open( "GET", ajax_url, true ); //Enviamos la solicitud ajax_request.send();</code></pre>Parémonos un momento en el método XMLHttpRequest.open. Este método admite varios parámetros, que son: (os remito a la documentación para más informatión3)<br><br><ul><li>método: el método HTTP a utilizar en la solicitud Ajax. GET o POST, en el ejemplo anterior fue GET.</li><li>url: dirección URL que se va a solicitar, o lo que es lo mismo, la URL a la que se va enviar la solicitud.</li><li>async: true (asíncrono) o false (síncrono). Es opcional y el valor por defecto es true. Hay quien recomienda ponerlo siempre por si no se respeta el valor por defecto.</li></ul><h2>Ejemplo con método POST</h2><br>Si se utiliza el método POST, la solicitud necesita ser enviada como si fuera un formulario (Content-type: application/x-www-form-urlencoded o multipart-form-data). Los datos se envían, al igual que antes en el ejemplo con el método GET, como query string pero en este caso se envían como parámetro del método XMLHttpRequest.send y no como parte de la URL:<pre><code>// Definimos la URL que vamos a solicitar via Ajax var ajax_url = "http://mysite.com/json/data.json"; // Definimos los parámetros que vamos a enviar var params = "parametro=valor&amp;otro_parametro=otro_valor"; // Creamos un nuevo objeto encargado de la comunicación var ajax_request = new XMLHttpRequest(); // Definimos como queremos realizar la comunicación ajax_request.open( "POST", ajax_url, true ); // Ponemos las cabeceras de la solicitud como si fuera un formulario, necesario si se utiliza POST ajax_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //Enviamos la solicitud junto con los parámetros ajax_request.send( params );</code></pre><h2>Enviar una solicitud POST con JSON</h2><br>Había dicho que el formato de los datos enviados en la solicitud POST tiene que ser tipo query string (key=valor&amp;key2=valor2) y que se tienen que enviar como un formulario (Content-type: application/x-www-form-urlencoded). Bien, no es cierto.<br><br>En realidad podemos hacer un POST con los datos en cualquier formato, por ejemplo en JSON:<pre><code>// El JSON a enviar var myjson = '{ "key" : "value", "key1" : "value1", "key2" : "value2" }' var ajax_request = new XMLHttpRequest(); ajax_request.open( "POST", ajax_url, true ); // Establecer la cabecera Content-Type apropiada ajax_request.setRequestHeader("Content-Type", "application/json; charset=UTF-8"); // Enviar la solicitud ajax_request.send( myjson );</code></pre>Pero PHP seguirá esperando que el cuerpo de la solicitud sea un query string. Al recibir un cuerpo con otro formato, no podremos acceder desde PHP a esos datos en la superglobal $_POST como es habitual. Tendremos que acceder directamente al cuerpo de la solicitud y decodificar el JSON:<pre><code>/// Obtenemos el json enviado $data = file_get_contents('php://input'); // Los convertimos en un array $data = json_decode( $data, true );</code></pre>Por eso decía que los datos se debían enviar como query string, porque en PHP no tiene mucho «sentido» enviarlos en otros formatos. Sin embargo, puede ser apropiado si en el servidor se utiliza otro lenguaje. Por ejemplo, enviar JSON mediante POST puede ser apropiado para servidores que utilicen Node.js.<br><br><h2>Recepción de la respuesta</h2><br>Ya sabemos cómo enviar la solicitud al servidor. Para recibir la respuesta se utiliza la propiedad XMLHttpRequest.onreadystatechange para ejecutar una función cuándo XMLHttpRequest.readyState cambia de valor. El valor de readyState que más nos interesa es 4; este valor indica que la solicitud Ajax ha concluido y la respuesta desde el servidor está disponible en XMLHttpRequest.responseText:<pre><code>// Definimos la URL que vamos a solicitar via Ajax var ajax_url = "http://mysite.com/json/data.json"; // Definirmos los parámetros que vamos a enviar var params = "parametro=valor&amp;otro_parametro=otro_valor"; // Añadimos los parámetros a la URL ajax_url += '?' + params; // Creamos un nuevo objeto encargado de la comunicación var ajax_request = new XMLHttpRequest(); // Definimos una función a ejecutar cuándo la solicitud Ajax tiene alguna información ajax_request.onreadystatechange = function() { // readyState es 4 if (ajax_request.readyState == 4 ) { // Analizaos el responseText que contendrá el JSON enviado desde el servidor var jsonObj = JSON.parse( ajax_request.responseText ); // La variable jsonObj ahora contiene un objeto con los datos recibidos } } // Definimos como queremos realizar la comunicación ajax_request.open( "GET", ajax_url, true ); //Enviamos la solicitud ajax_request.send();</code></pre><h2>Trabajando con el formato JSON en jаvascript</h2><br>Aunque el propio nombre Ajax signifique Asynchronous jаvascript And XML y el objeto utilizado para la comunicación cliente-servidor se llame XMLHttpRequest, con Ajax se puede solicitar en realidad cualquier tipo de datos: XML, HTML, texto plano, jаvascript, CSS y cualquier otro formato que se te pueda ocurrir, incluido el formato JSON que hoy en día es el formato de elección para intercambio de datos cuándo se trabaja con Ajax.<br><br>JSON son las siglas de jаvascript Object Notation (Notación de Objeto jаvascript). Los objetos jаvascript tienen una estructura compuesta por pares key : value (clave : valor):<pre><code>{key : value, key2 : value2, key3 : value3, ...}</code></pre>En el siguiente ejemplo la variable misDatos es un objeto jаvascript y tiene tres elementos cuyas key son nombre, apellidos y edad, y se puede acceder a sus valores con misDatos.name, misDatos.apellidos y misDatos.edad.<br><br>// La variable misDatos contiene un objeto jаvascript<br>var misDatos = {"nombre" : "Antonio", "apellidos" : "Molina Ballesteros", "edad" : 35};<pre><code>console.log( misDatos.nombre ); console.log( misDatos.apellidos ); console.log( misDatos.edad );</code></pre>Los objetos pueden ser multidimensionales; por ejemplo:<pre><code>{ key : value, key2 : { subkey : subvalue, subkey2 : subvalue2 } }</code></pre>Y se accede a los subkeys como jsonObj.key2.subkey, jsonObj.key2.subkey2, etc:<pre><code>// La variable misDatos contiene un objeto jаvascript var misDatos = { "nombre" : "Alex", "apellidos" : "Agustin e...", "edad" : 35, "direccion" : { "calle" : "Gran Via, 3", "ciudad" : "Lanzarote" } }; console.log( misDatos.nombre ); console.log( misDatos.apellidos ); console.log( misDatos.edad ); console.log( misDatos.direccion.calle ); console.log( misDatos.direccion.ciudad );</code></pre><h2>JSON.parse</h2><br>La respuesta JSON en una solicitud Ajax es un string, no es un objeto jаvascript sino una cadena de texto con notación de objeto jаvascript, esto es JSON. Es necesario convertir esta cadena a un objeto antes de intentar trabajar con los datos. Esta conversión se realiza con el método JSON.parse. El siguiente ejemplo es exactamente igual que el anterior pero la variable misDatos es un string (fíjate en las comillas) y es necesario aplicar JSON.parse para convertirlo en un objeto jаvascript:<pre><code>// La variable misDatos es un string en notación JSON, pero no un objeto var misDatos = '{ "nombre" : "Antonio", "apellidos" : "Molina Ballesteros", "edad" : 35, "direccion" : { "calle" : "Gran Via, 2", "ciudad" : "Madrid"} }'; // Se pasa el string a un objeto JSON var jsonObj = JSON.parse( misDatos ); // Ahora, la variable jsonObj contiene el valor de cada key accesible en la forma jsonObj.key console.log( jsonObj.nombre ); console.log( jsonObj.apellidos ); console.log( jsonObj.edad ); console.log( jsonObj.direccion.calle ); console.log( jsonObj.direccion.ciudad );</code></pre><h2>Ejemplo AJAX e interacción con PHP</h2><br>Ya hemos visto como construir una solicitud Ajax y como trabajar con objetos en jаvascript de forma básica, así que estamos listos para combinar ambos. Vamos a ver un ejemplo en el que se envía una solicitud Ajax a un script PHP que devuelve información en formato JSON. Voy a utilizar el mismo <a href="https://tutorialesenlinea.es/2724-ajax-con-jquery-json-y-php-ejemplo-paso-a-paso.html">ejemplo que en el tutorial mencionado al principio de este tutorial</a>, tan sólo cambia el jаvascript utilizado, el PHP es exactamente igual y no lo voy a repetir aquí, aunque puedes descargarte el ejemplo completo más abajo.<pre><code>&lt;!DOCTYPE html&gt; &lt;html lang="es-ES"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;script&gt; //getdeails será nuestra función para enviar la solicitud ajax var getdetails = function( id ){ // Definimos la URL que vamos a solicitar via Ajax var ajax_url = "personas.php"; // Definimos los parámetros que vamos a enviar // Debería trabajar en hacer esto un poco más limpio, de momento vale para hacer funcionar el ejemplo var params = ''; id = JSON.parse(id).toString(); id = id.split(","); if( id.length &gt; 1 ) { //Si hay más de un id, enviar como query string array for( elem in id ) { params += "id[]=" + id[elem] +"&amp;"; } } else { params = "id=" + id; } //Añadimos los parámetros a la URL ajax_url += '?' + params; // Creamos un nuevo objeto encargado de la comunicación var ajax_request = new XMLHttpRequest(); // Definimos una función a ejecutar cuándo la solicitud Ajax tiene alguna información ajax_request.onreadystatechange = function() { // see readyState es 4, proseguir if (ajax_request.readyState == 4 ) { // Analizaos el responseText que contendrá el JSON enviado desde el servidor var response = JSON.parse( ajax_request.responseText ); if( response.success ) { var output = "&lt;h1&gt;" + response.data.message + "&lt;/h1&gt;"; //recorremos cada usuario for ( user in response.data.users ) { output += "&lt;h2&gt;Detalles del usuario " + response.data.users[user].ID + "&lt;/h2&gt;"; //recorremos los valores de cada usuario for ( userdata in response.data.users[user] ) { output += '&lt;ul&gt;'; output += '&lt;li&gt;' + userdata + ': ' + response.data.users[user][userdata] + "&lt;/li&gt;"; output += '&lt;/ul&gt;'; } } //Actualizamos el HTML del elemento con id="#response-container" document.getElementById("response-container").innerHTML = output; } else { //response.success no es true document.getElementById("response-container").innerHTML = 'No ha habido suerte: ' + response.data.message; } } } // Definimos como queremos realizar la comunicación ajax_request.open( "GET", ajax_url, true ); //Enviamos la solictud con los parámetros que habíamos definido ajax_request.send(); }; // Esperar a &#111;nload para poder acceder a los elementos del DOM window.&#111;nload = function() { // Obtener todos los botones que utilizamos para lanzar la solicitud Ajax var userbutton = document.getElementsByTagName( "button" ); for (var i=0; i &lt; userbutton.length; i++) { // Para boton seleccionado, cuándo se haga click llamar a la funcion gedetails donde manjamos la solicitud ajax userbutton[i].&#111;nclick = function() { document.getElementById("response-container").innerHTML = "&lt;p&gt;Buscando...&lt;/p&gt;"; // Obtener el valor de data-user, pasar a array si se necesita y ejecutar la funcion getdetails() var id = this.getAttribute('data-user'); getdetails( id ); } } }; &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;p&gt;&lt;button class="userdata" data-user="1"&gt;Dame los datos de la persona con ID = 1&lt;/button&gt; - &lt;button class="userdata" data-user='["1","2","3"]'&gt;Dame los datos de las personas con ID = 1, ID = 2 e ID = 3.&lt;/button&gt; - &lt;button class="userdata" data-user="0"&gt;Ningún usuario&lt;/button&gt;&lt;/p&gt; &lt;div id="response-container"&gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</code></pre>Nota: A continuación puedes descargarte el ejemplo completo, incluido el script PHP. Antes de intentar ver el ejemplo en vivo, revisa el fichero PHP y cambia las credenciales de la base de datos de ejemplo que has tenido que crear previamente.<br><a href="https://acortador.tutorialesenlinea.es/xjWv" target="_blank" rel="noopener external nofollow">Descargar el ejemplo completo</a><br><h2>Referencias</h2><br><ol><li><a href="https://acortador.tutorialesenlinea.es/4dZpT" target="_blank" rel="noopener external nofollow">Objetos globales</a>: JSON. Mozilla Developers Network.</li><li><a href="https://acortador.tutorialesenlinea.es/lZGE" target="_blank" rel="noopener external nofollow">jаvascript Objets</a>. w3schools.</li><li><a href="https://acortador.tutorialesenlinea.es/qYysms" target="_blank" rel="noopener external nofollow">Web API Reference</a>: XMLHttpRequest. Mozilla Developers Network.</li></ol>]]></content:encoded>
</item><item>
<title>Ajax con jQuery, JSON y PHP: ejemplo paso a paso</title>
<link>https://tutorialesenlinea.es/2724-ajax-con-jquery-json-y-php-ejemplo-paso-a-paso.html</link>
<pdalink>https://tutorialesenlinea.es/2724-ajax-con-jquery-json-y-php-ejemplo-paso-a-paso.html</pdalink>
<guid>https://tutorialesenlinea.es/2724-ajax-con-jquery-json-y-php-ejemplo-paso-a-paso.html</guid>
<pubDate>Wed, 07 Aug 2019 18:28:04 +0200</pubDate>
<category>native-yes</category>

<enclosure url="https://tutorialesenlinea.es/uploads/posts/2019-08/thumbs/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" type="image/webp" />
<content:encoded><![CDATA[<a class="highslide" href="https://tutorialesenlinea.es/uploads/posts/2019-08/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" target="_blank"><img src="https://tutorialesenlinea.es/uploads/posts/2019-08/thumbs/1565198368_ajax-con-jquery-json-y-ejemplo-paso-a-paso-tutoriales_en_linea.webp" alt="Ajax con jQuery, JSON y PHP: ejemplo paso a paso" class="fr-dib"></a>Ajax, jQuery y PHP es una combinación de las que molan. Te permite, con relativamente poco esfuerzo, crear aplicaciones interactivas, dinámicas y atractivas. Y si añadimos JSON como formato de intercambio de datos la cosa aún se pone mejor. En este tutorial vamos a ver un pequeño ejemplo, explicado paso a paso, de todo esto junto y funcionando: <a href="https://tutorialesenlinea.es/582-que-es-jquery.html" target="_blank">jQuery</a>, Ajax, <a href="https://tutorialesenlinea.es/37-que-es-php.html">PHP </a>y JSON. Si queréis saltaros la explicación, podéis ir directamente al ejemplo.Nota: Para continuar con este tutorial deberías tener conocimientos básicos de PHP y jQuery.<h2>¿Qué es Ajax y que es JSON?</h2><br>Ajax son las siglas de Asynchronous jаvascript And XML y es una tecnología que permite a una página web actualizarse de forma dinámica sin que tenga que recargarse completamente. jаvascript es el encargado de comunicarse con el servidor enviando y recibiendo datos desde la página web, en el servidor la solicitud es procesada y se envía una respuesta que es interpretada de nuevo por jаvascript en la página web.<br><br>Aunque con Ajax se puede solicitar cualquier tipo de recurso web, el intercambio de datos entre la página web y el servidor ha sido realizado tradicionalmente, como el propio nombre indica, en formato XML (<a href="https://tutorialesenlinea.es/148-extensible-markup-language-xml.html">eXtensible Markup Language</a>), un lenguaje de marcas que permite definir una gramática específica y, por tanto, permite el intercambio de información estructurada y legible.<br><br>Y llegó JSON (jаvascript Object Notation), más ligero y con una notación más simple, y se convirtió en el formato más utilizado para el intercambio de datos cuándo se trabaja con Ajax. Además, con una ligera variación (JSONP) puede utilizarse en solicitudes Ajax entre diferentes dominios (cross-domain).<br><br>El formato JSON tiene la siguiente notación:<pre><code>{key : value, key2 : value2, key3 : value3,...}</code></pre>Y también puede ser serializado y multidimensional, por ejemplo:<pre><code>[{key : value, key2 : value2, key3 : value3, key : { key : value, key2 : value2, key3 : value3} },{key : value, key2 : value2, key3 : value3,...}]</code></pre>Puedes ver todas las especificaciones del formato JSON <a href="https://acortador.tutorialesenlinea.es/5skqbV" target="_blank" rel="noopener external nofollow">json.org</a>.<br><br><h2>JSON en PHP</h2><br>En cualquier instalación estándar de PHP, desde la versión 5.2.0, se incorpora de forma predeterminada la <a href="https://acortador.tutorialesenlinea.es/ibYi" target="_blank" rel="noopener external nofollow">extensión JSON</a> y es muy fácil pasar los datos de un array a notación en JSON. Aunque si no se cuenta con esta extensión se puede construir la notación JSON de forma manual, es recomendable tenerla si vas a trabajar de forma frecuente con datos en formato JSON.<br><br>Entre las funciones de la extensión JSON para PHP que nos interesan, la más imprescindible es la función json_encode(). Con esta función podemos pasar nuestros datos a formado JSON rápida y fácilmente. Sólo es necesario tener los datos en forma de array u objeto. Por ejemplo:<pre><code>&lt;?php $jsondata = array(); if( isset($_GET['param']) ) { if( $_GET['param'] == 'valor' ) { $jsondata['success'] = true; $jsondata['message'] = 'Hola! El valor recibido es correcto.'; } else { $jsondata['success'] = false; $jsondata['message'] = 'Hola! El valor recibido no es correcto.'; } //Aunque el content-type no sea un problema en la mayoría de casos, es recomendable especificarlo header('Content-type: application/json; charset=utf-8'); echo json_encode($jsondata); exit(); }</code></pre><h2>Ajax con JSON y jQuery</h2><br>Uno de los argumentos del método jQuery.ajax() es dataType y aquí podemos especificar que vamos a utilizar datos JSON en la respuesta. Si no especificamos nada en dataType, jQuery intetará detectar de forma automática el formato de los datos recibidos. Si en la respuesta desde el servidor se especifica, como hicimos en el ejemplo anterior, el tipo de contenido, será más fácil para jQuery tratar los datos correctamente. Utilizando jQuery.ajax() tendría un aspecto similar a:<pre><code>$.ajax({ // En data puedes utilizar un objeto JSON, un array o un query string dаta: {"parametro1" : "valor1", "parametro2" : "valor2"}, //Cambiar a type: POST si necesario type: "GET", // Formato de datos que se espera en la respuesta dataType: "json", // URL a la que se enviará la solicitud Ajax url: "script.php", }) .done(function( data, textStatus, jqXHR ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud se ha completado correctamente." ); } }) .fail(function( jqXHR, textStatus, errorThrown ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud a fallado: " + textStatus); } });</code></pre>Además del método anterior, podemos utilizar el atajo <a href="https://acortador.tutorialesenlinea.es/CZG7" target="_blank" rel="noopener external nofollow">getJSON()</a>, que quedaría de esta forma para hacer exactamente lo mismo:<pre><code>$.getJSON( "script.php", { "parametro1" : "valor1", "parametro2" : "valor2" } ) .done(function( data, textStatus, jqXHR ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud se ha completado correctamente." ); } }) .fail(function( jqXHR, textStatus, errorThrown ) { if ( console &amp;&amp; console.log ) { console.log( "Algo ha fallado: " + textStatus" ); } });</code></pre>Ten en cuenta que .getJSON(), como su nombre indica, siempre hace una solicitud con el método GET, si necesitas enviar la solicitud mediante método POST tendrás que utilizar otras funciones de jQuery como<a href="https://acortador.tutorialesenlinea.es/j0vtN" target="_blank" rel="noopener external nofollow"> .ajax()</a>con el argumento type puesto a POST o su alias .post(). Por ejemplo:<pre><code>$.ajax({ dаta: {"parametro1" : "valor1", "parametro2" : "valor2"}, type: "POST", dataType: "json", url: "script.php", }) .done(function( data, textStatus, jqXHR ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud se ha completado correctamente." ); } }) .fail(function( jqXHR, textStatus, errorThrown ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud a fallado: " + textStatus); } }); //Equivalente a lo anterior $.post( "script.php", { "parametro1" : "valor1", "parametro2" : "valor2" }, null, "json" ) .done(function( data, textStatus, jqXHR ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud se ha completado correctamente." ); } }) .fail(function( jqXHR, textStatus, errorThrown ) { if ( console &amp;&amp; console.log ) { console.log( "La solicitud a fallado: " + textStatus); } });</code></pre>En el ejemplo PHP anterior, en el objeto JSON había dos miembros: success y message. Un posible objeto JSON recibido podría ser el siguiente:<pre><code>{"success" : true, "message" : "Hola! El valor recibido es correcto."}</code></pre>Este objeto es recibido en el método .done() a través del argumento data y podemos acceder al valor de cada miembro del objeto JSON del siguiente modo:<pre><code>.done( function(data) { data.success; data.message; });</code></pre><h1>Ejemplo paso a paso</h1><br>Vamos a ver un ejemplo en el que vamos a realizar una solicitud ajax a un script PHP que interaccionará con una base de datos para buscar los registros de unos hipotéticos usuarios. El ejemplo lo he elaborado para cubrir varias posibilidades, entre ellas que se solicite sólo un registro de la base de datos o varios.<br><br><h2>Base de datos</h2><br>Primero preparamos una tabla dónde vamos a tener los datos de los usuarios. Para ello entra en phpMyAdmin o similar y ejecuta esta consulta para crear la tabla «cyb_users» con las columnas ID, username, email y url.<pre><code>CREATE TABLE IF NOT EXISTS &#96;cyb_users&#96; ( &#96;ID&#96; bigint(20) unsigned NOT NULL AUTO_INCREMENT, &#96;username&#96; varchar(50) NOT NULL DEFAULT '', &#96;email&#96; varchar(100) NOT NULL DEFAULT '', &#96;url&#96; varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (&#96;ID&#96;) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;</code></pre>Y luego creamos estos usuarios de ejemplo:<pre><code>INSERT INTO &#96;cyb_users&#96; (&#96;ID&#96;, &#96;username&#96;, &#96;email&#96;, &#96;url&#96;) VALUES (1, 'Paco', 'thisismy@email.com', 'http://miblog.name'), (2, 'Juan', 'elcorreode@juan.com', 'http://www.misitio.com'), (3, 'Ana', 'escribrea@ana.com', 'http://tusitio.com');</code></pre>El JSON con el que vamos a trabajar tiene la siguiente estructura:<pre><code>{ "success" : true|false, "data" : { "message" : "", "users" : [{ "ID" : "", "username" : "", "email" : "", "url" : "" }, {...} ] } }</code></pre><h2>El HTML</h2><pre><code>&lt;!DOCTYPE html&gt; &lt;html lang="es-ES"&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;script src="//code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt; &lt;script src="miscript.js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div&gt;&lt;button data-user="1"&gt;Dame los datos de la persona con ID = 1&lt;/button&gt; - &lt;button data-user="[1,2,3]"&gt;Dame los datos de las personas con ID = 1, ID = 2 e ID = 3.&lt;/button&gt; - &lt;button data-user="0"&gt;Ningún usuario&lt;/button&gt;&lt;/div&gt; &lt;div id="response-container"&gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</code></pre><h2>jQuery: miscript.js</h2><pre><code>$(document).ready(function() { // getdeails será nuestra función para enviar la solicitud ajax var getdetails = function(id) { return $.getJSON("personas.php", { "id": id }); } // Al hacer click sobre cualquier elemento que tenga el atributo data-user..... $('[data-user]').click(function(e) { // Detenemos el comportamiento normal del evento click sobre el elemento clicado e.preventDefault(); // Mostramos texto de que la solicitud está en curso $("#response-container").html("&lt;p&gt;Buscando...&lt;/p&gt;"); // this hace referencia al elemento que ha lanzado el evento click // con el método .data('user') obtenemos el valor del atributo data-user de dicho elemento y lo pasamos a la función getdetails definida anteriormente getdetails( $(this).data('user') ) .done(function(response) { //done() es ejecutada cuándo se recibe la respuesta del servidor. response es el objeto JSON recibido if (response.success) { var output = "&lt;h1&gt;" + response.data.message + "&lt;/h1&gt;"; // recorremos cada usuario $.each(response.data.users, function(key, value) { output += "&lt;h2&gt;Detalles del usuario " + value['ID'] + "&lt;/h2&gt;"; // recorremos los valores de cada usuario $.each(value, function(userkey, uservalue) { output += '&lt;ul&gt;'; output += '&lt;li&gt;' + userkey + ': ' + uservalue + "&lt;/li&gt;"; output += '&lt;/ul&gt;'; }); }); // Actualizamos el HTML del elemento con id="#response-container" $("#response-container").html(output); } else { //response.success no es true $("#response-container").html('No ha habido suerte: ' + response.data.message); } }) .fail(function(jqXHR, textStatus, errorThrown) { $("#response-container").html("Algo ha fallado: " + textStatus); }); }); });</code></pre><h2>PHP: personas.php</h2><br>Este es el script PHP que se encargará de procesar la soclitud Ajax, consultará a la base de datos en busca de los detalles de los usuarios solicitados y devolverá el resultado en formato JSON. En las líneas 12 – 15 debes poner los datos de acceso a tu base datos.<br><pre><code>&lt;?php if( isset($_GET['id']) ) { get_persons($_GET['id']); } else { die("Solicitud no válida."); } function get_persons( $id ) { //Cambia por los detalles de tu base datos $dbserver = "localhost"; $dbuser = "usuario_basededatos"; $password = "password_basededatos"; $dbname = "nombre_basededatos"; $database = new mysqli($dbserver, $dbuser, $password, $dbname); if($database-&gt;connect_errno) { die("No se pudo conectar a la base de datos"); } $jsondata = array(); //Sanitize ipnut y preparar query if( is_array($id) ) { $id = array_map('intval', $id); $querywhere = "WHERE &#96;ID&#96; IN (" . implode( ',', $id ) . ")"; } else { $id = intval($id); $querywhere = "WHERE &#96;ID&#96; = " . $id; } if ( $result = $database-&gt;query( "SELECT * FROM &#96;cyb_users&#96; " . $querywhere ) ) { if( $result-&gt;num_rows &gt; 0 ) { $jsondata["success"] = true; $jsondata["data"]["message"] = sprintf("Se han encontrado %d usuarios", $result-&gt;num_rows); $jsondata["data"]["users"] = array(); while( $row = $result-&gt;fetch_object() ) { //$jsondata["data"]["users"][] es un array no asociativo. Tendremos que utilizar JSON_FORCE_OBJECT en json_enconde //si no queremos recibir un array en lugar de un objeto JSON en la respuesta //ver php.net/manual/es/function.json-encode.php para más info $jsondata["data"]["users"][] = $row; } } else { $jsondata["success"] = false; $jsondata["data"] = array( 'message' =&gt; 'No se encontró ningún resultado.' ); } $result-&gt;close(); } else { $jsondata["success"] = false; $jsondata["data"] = array( 'message' =&gt; $database-&gt;error ); } header('Content-type: application/json; charset=utf-8'); echo json_encode($jsondata, JSON_FORCE_OBJECT); $database-&gt;close(); } exit();</code></pre><a href="https://acortador.tutorialesenlinea.es/adgEu" target="_blank" rel="noopener external nofollow">Descarga el ejemplo de AJAX con jQuery, JSON y PHP</a>]]></content:encoded>
</item><item>
<title>Optimizando el DataLife Engine (DLE) para Pagespeed</title>
<link>https://tutorialesenlinea.es/1204-optimizando-el-datalife-engine_dle_para-pagespeed.html</link>
<pdalink>https://tutorialesenlinea.es/1204-optimizando-el-datalife-engine_dle_para-pagespeed.html</pdalink>
<guid>https://tutorialesenlinea.es/1204-optimizando-el-datalife-engine_dle_para-pagespeed.html</guid>
<pubDate>Wed, 03 Oct 2018 19:03:48 +0200</pubDate>
<category>native-yes</category>

<enclosure url="https://tutorialesenlinea.es/uploads/posts/2016-12/thumbs/1483038526_optimizando-el-datalife-engine-dle-para-pagespeed-tutoriales-en-linea.webp" type="image/webp" />
<content:encoded><![CDATA[<div style="text-align:center;"><p style="text-align:center;"><a href="https://tutorialesenlinea.es/uploads/posts/2016-12/1483038526_optimizando-el-datalife-engine-dle-para-pagespeed-tutoriales-en-linea.webp" class="highslide" target="_blank"><img src="https://tutorialesenlinea.es/uploads/posts/2016-12/thumbs/1483038526_optimizando-el-datalife-engine-dle-para-pagespeed-tutoriales-en-linea.webp" style="max-width:100%;" alt=""></a></p></div><div>En este Tutoriales En Linea les traigo una manera de optimizar el DLE para moviles según Google Developer para <span>Pagespeed... </span>la forma de optimizar la calidad de su página web con el fin de lograr el mejor rendimiento posible para PageSpeed.</div><div><br></div><h2>¿Hay Algo Malo En El CSS?</h2><div><br></div><div>Todos los <span>archivos de </span>CSS y JS se tendrá que minificar y empaquetar en DLE. Estos recursos en DataLife Engine quedara algo como esto:</div><div><br></div><div>Dependiendo de la codificaron de tu sitio windows-1251 o UTF-8, el charset = <span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">codificación de tu </span>sitio, f = todos los scripts/estilos, separados por comas, y 30 el número de días que permanecerá en la memoria caché del navegador del usuario.</div><div> </div><div>En la carpeta de la raiz de tu sitio (public_html de tu servidor...) buscar el archivo <span><b>.htaccess</b> de tu pagina web en el busca RewriteEngine y </span>después<span> de eso pega lo siguiente:</span></div><div><br></div><div><b>windows-1251</b></div><div><pre><code>RewriteRule ^all.css$ /engine/classes/min/index.php?charset=windows-1251&amp;f=/templates/<span>Tema de la plantilla</span>/css/allsite.css,/templates/<span><span>Tema de la plantilla</span></span>/css/font-awesome.css,/templates/<span><span>Tema de la plantilla</span></span>/css/bbcodes.css&amp;30 [QSA]</code></pre></div><div><b>UTF-8</b></div><div><pre><code>RewriteRule ^all.css$ /engine/classes/min/index.php?charset=UTF-8&amp;f=/templates/<span>Tema de la plantilla</span>/css/allsite.css,/templates/<span>Tema de la plantilla</span>/css/font-awesome.css,/templates/<span>Tema de la plantilla</span>/css/bbcodes.css&amp;30 [QSA]</code></pre></div><div>En tu plantilla de tu pagina web puedes agregar todos tus estilos de CSS....en el archivo de <b>main.tpl</b>... si ese es el archivo de configuración por que también puede ser <b>custom.tpl</b>....Depende de tu configuración en la opciones de sistema del panel de administracion...</div><div><pre><code>&lt;link href="/all.css" rel="stylesheet" /&gt;</code></pre></div><div>Pero si usted tiene algunos estilos que sólo usas en algunas ocaciones, por ejemplo, en la noticia completa o una página estática de noticias, lo mejor es separarlas. Quedaria algo como esto:</div><pre><code>[aviable=addnews] &lt;link href="/add.css" rel="stylesheet" /&gt; [/aviable] [aviable=showfull] &lt;link href="/full.css" rel="stylesheet" /&gt; [/aviable] </code></pre><div>Con los archivos Js hacemos algo idéntico:</div><div> </div><div><span style="font-weight:bold;word-spacing:1.1px;">windows-1251</span></div><div><pre><code>[aviable=showfull] &lt;script src="/engine/classes/min/index.php?charset=windows-1251&amp;amp;f=&#123;THEME}/js/uppod_api.js,&#123;THEME}/js/jquery.wysibb.min.js,&#123;THEME}/js/fullstory.js&amp;30" type="text/jаvascript"&gt;&lt;/script&gt; [/aviable]</code></pre></div><div><span style="font-weight:bold;word-spacing:1.1px;">UTF-8</span></div><div><pre><code>[aviable=showfull] &lt;script src="/engine/classes/min/index.php?charset=UTF-8&amp;amp;f=&#123;THEME}/js/uppod_api.js,&#123;THEME}/js/jquery.wysibb.min.js,&#123;THEME}/js/fullstory.js&amp;30" type="text/jаvascript"&gt;&lt;/script&gt; [/aviable]</code></pre></div><div>O poner en <b>.htaccess</b> con estilos similares de comprobar la validez de intercambio &#123;THEME} con la ruta a su tema. Por cierto, usted puede poner los requeridos JS en las bibliotecas de la matriz principal <b>groupsConfig.php</b> (más sobre esto más adelante).</div><div><br></div><h2>En cuanto a JS...</h2><div><br></div><div>Como es sabido para la que la optimizacion sea optima todos los scripts deberán que moverse a la parte inferior del código antes de la etiqueta de cierre. ¿Pero qué hacer con esas secuencias de comandos que requieren el DLE y las salidas de estos a través de la etiqueta &lt;head&gt;?...</div><div>En las versiónes anteriores, DLE 10.6 se introduce una nueva clase {<span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">jsfiles</span>}, que muestra tres archivo adicionales (la librería de jQuery, jQuery-UI y dle_js)...</div><div><br></div><div>Antes de la versión 10.6 hay que hacer lo siguiente:</div><div><br></div><div>Buscar los archivos:</div><div><pre><code>/index.php o /engine/modules/main.php</code></pre></div><div>(dependiendo de la versión) y en ellos buscar:</div><div><pre><code>$tpl-&gt;set ( '{headers}', $metatags."\n".$js_array );</code></pre></div><div>Y se divide en dos etiqueta de plantilla:</div><pre><code>$tpl-&gt;set ( '{headers}', $metatags ); $tpl-&gt;set ( '{jsfiles}', $js_array );</code></pre><div>Es decir, dejamos en el archivo main.tpl {<span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">Header</span>}(<span style="letter-spacing:0px;line-height:1.5em;word-spacing:1.1px;">cabeceras)</span>, y añadimos:</div><pre><code>{AJAX} {jsfiles}</code></pre>Como se puede ver, el {<span>AJAX</span>} y los {<span>jsfiles</span>}. Aquí es necesario hacer una observación. Solía haber la libreria de jQuery para cargar el CDN, tales como:<pre><code>&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"&gt;&lt;/script&gt; &lt;script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"&gt;&lt;/script&gt; {AJAX} {jsfiles} </code></pre>En este sentido, es necesario eliminar la biblioteca incorporada <span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">de {</span><span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">jsfiles</span><span style="letter-spacing:0px;line-height:1.5em;word-spacing:1.1px;">}</span>.Vamos a /engine/modules/functions.php y quitar/comentario:<pre><code>'engine/classes/js/jquery.js', 'engine/classes/js/jqueryui.js', </code></pre><div>A continuación, vamos al archivo /engine/classes/min/groupsConfig.php y quitar/comentario:</div><pre><code>$min_documentRoot . '/engine/classes/js/jquery.js', $min_documentRoot . '/engine/classes/js/jqueryui.js', </code></pre><div>Y si quiere que sus "<a href="https://tutorialesenlinea.es/141-tu-sitio-esta-optimizado-para-moviles.html" target="_blank" title="https://tutorialesenlinea.es/141-tu-sitio-esta-optimizado-para-moviles.html">contenidos web estén adaptados a la tecnología móvil</a>", quedaría como lo siguiente:</div><pre><code>'general' =&gt; array( #$min_documentRoot . '/engine/classes/js/jquery.js', #$min_documentRoot . '/engine/classes/js/jqueryui.js', $min_documentRoot . '/engine/classes/js/dle_js.js', $min_documentRoot . '/templates/Default/js/jquery.cookie.js', $min_documentRoot . '/templates/Default/js/ajaxform.js', $min_documentRoot . '/templates/Default/js/main.js', ), </code></pre><div>Y luego, en sus {<span style="word-spacing:1.1px;letter-spacing:0px;line-height:1.5em;">jsfiles</span>} estarán todos los scripts necesarios. Por supuesto, a condición de la memoria de caché.</div><br><div>Limpiamos el caché y vemos los resultado! Por lo tanto, hemos realizado 3 reglas: Reducir jаvascript, CSS minificado y empaquetado y eliminado de la parte superior de las páginas de código jаvascript, CSS y el bloqueo de pantalla. Eventualmente el archivo <b>main.tpl</b> quedaría similar al siguiente archivo:</div><pre><code>&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; {headers} &lt;link href="&#123;THEME}/images/favicon.ico" rel="icon" type="image/x-icon"/&gt; &lt;link href="&#123;THEME}/images/favicon.ico" rel="shortcut icon" type="image/x-icon"/&gt; &lt;link href="/all.css" rel="stylesheet"/&gt; [aviable=showfull] &lt;link href="/full.css" rel="stylesheet"/&gt; [/aviable] [aviable=addnews] &lt;link href="/add.css" rel="stylesheet"/&gt; [/aviable] &lt;/head&gt; &lt;body&gt; &#123;content} &lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"&gt;&lt;/script&gt; &lt;script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"&gt;&lt;/script&gt; {AJAX} {jsfiles} [aviable=showfull] &lt;script src="/full.js"&gt;&lt;/script&gt; [/aviable] [aviable=addnews] &lt;script src="/add.js"&gt;&lt;/script&gt; [/aviable] &lt;/body&gt; &lt;/html&gt; </code></pre><div>Tal vez los siguientes artículos serán de tu interes:</div> <div><ul><li><a href="https://tutorialesenlinea.es/141-tu-sitio-esta-optimizado-para-moviles.html" target="_blank" title="https://tutorialesenlinea.es/141-tu-sitio-esta-optimizado-para-moviles.html">Tu Sitio Está Optimizado Para Móviles...</a></li><li><a href="https://tutorialesenlinea.es/1175-optimizar-la-entrega-de-css.html" target="_blank" title="https://tutorialesenlinea.es/1175-optimizar-la-entrega-de-css.html">Optimizar La Entrega De CSS</a></li><li><a href="https://tutorialesenlinea.es/1176-habilitar-compresion.html" target="_blank" title="https://tutorialesenlinea.es/1176-habilitar-compresion.html">Habilitar compresión</a></li><li><a href="https://tutorialesenlinea.es/1178-minificar-recursos-html-css-y-j%D0%B0vascript.html" target="_blank" title="https://tutorialesenlinea.es/1178-minificar-recursos-html-css-y-jаvascript.html">Minificar recursos (HTML, CSS y jаvascript)</a></li><li><a href="https://tutorialesenlinea.es/1177-reducir-el-tamano-del-contenido-de-la-mitad-superior-de-la-pagina.html" target="_blank" title="https://tutorialesenlinea.es/1177-reducir-el-tamano-del-contenido-de-la-mitad-superior-de-la-pagina.html">Reducir el tamaño del contenido de la mitad superior de la página</a></li></ul></div>]]></content:encoded>
</item><item>
<title>Formularios JS</title>
<link>https://tutorialesenlinea.es/1952-formularios-js.html</link>
<pdalink>https://tutorialesenlinea.es/1952-formularios-js.html</pdalink>
<guid>https://tutorialesenlinea.es/1952-formularios-js.html</guid>
<pubDate>Fri, 10 Aug 2018 19:49:11 +0200</pubDate>
<category>native-yes</category>

<enclosure url="https://tutorialesenlinea.es/uploads/posts/2018-08/thumbs/1533923330_formularios-js_tutoriales_en_linea.webp" type="image/webp" />
<content:encoded><![CDATA[<a class="highslide" href="https://tutorialesenlinea.es/uploads/posts/2018-08/1533923330_formularios-js_tutoriales_en_linea.webp" target="_blank"><img src="https://tutorialesenlinea.es/uploads/posts/2018-08/thumbs/1533923330_formularios-js_tutoriales_en_linea.webp" alt="" class="fr-dib"></a><h2>Objetivo</h2><br><ul><li>Realizar un formulario para ser usado desde jаvascript</li></ul><br><h2>Lecturas propuestas</h2><br><ul><li><a href="https://tutorialesenlinea.es/1952-formularios-js.html#sel=10:1,10:1" target="_blank">Formularios.</a></li><li><a href="https://tutorialesenlinea.es/1953-propiedades-basicas-de-formularios-y-elementos.html" target="_blank">Propiedades básicas de los formularios.</a></li><li><a href="https://tutorialesenlinea.es/1954-expresiones-regulares-js.html" target="_blank">Expresiones regulares.</a></li><li><a href="https://tutorialesenlinea.es/1955-validacion-de-campo-js.html" target="_blank">Validación de campos.</a></li><li><a href="https://tutorialesenlinea.es/1956-objetos-dom-para-formularios.html" target="_blank">Objetos DOM para formularios.</a></li></ul><hr><h1>Formularios</h1><br>La programación de aplicaciones que contienen formularios web siempre ha sido una de las tareas fundamentales de jаvascript. De hecho, una de las principales razones por las que se inventó el lenguaje de programación jаvascript fue la necesidad de validar los datos de los formularios directamente en el navegador del usuario. De esta forma, se evitaba recargar la página cuando el usuario cometía errores al rellenar los formularios.<br><br>No obstante, la aparición de las aplicaciones <a href="https://acortador.tutorialesenlinea.es/4hLO" target="_blank" rel="noopener external nofollow">AJAX </a>ha relevado al tratamiento de formularios como la principal actividad de jаvascript. Ahora, el principal uso de jаvascript es el de las comunicaciones asíncronas con los servidores y el de la manipulación dinámica de las aplicaciones. De todas formas, el manejo de los formularios sigue siendo un requerimiento imprescindible para cualquier programador de jаvascript.]]></content:encoded>
</item></channel></rss>