Foros del Web » Programando para Internet » Javascript »

[Aporte] Ajax - Sin Librerias

Estas en el tema de [Aporte] Ajax - Sin Librerias en el foro de Javascript en Foros del Web. Este liviano documento, te permitirá enviar peticiones al servidor y operar con la respuesta ya sea aplicando un innerHTML en algún elemento del DOM, o ...
  #1 (permalink)  
Antiguo 05/01/2015, 21:01
 
Fecha de Ingreso: diciembre-2014
Ubicación: montería
Mensajes: 33
Antigüedad: 9 años, 4 meses
Puntos: 0
Información [Aporte] Ajax - Sin Librerias

Este liviano documento, te permitirá enviar peticiones al servidor y operar con la respuesta ya sea aplicando un innerHTML en algún elemento del DOM, o simplemente guardar el resultado en una variable.

La sintaxis es bastante flexible:
Código Javascript:
Ver original
  1. ajax(url) /////////////////////////////////////// Retorna la pagina definida | «Dato requerido»
  2. ajax(url,dato) ////////////////////////////////// Puede o no enviar datos a la pagina | null predeterminado
  3. ajax(url,dato,metodo) /////////////////////////// Puede definir el método "POST" o "GET" | "POST" predeterminado
  4. ajax(url,dato,metodo,async) ///////////////////// Puede definir si la consulta es asincrónica | false predeterminado
  5.  
  6. ajax(idcontenedor,url) ////////////////////////// Escribe el resultado en el elemento
  7. ajax(idelemento,url,dato)
  8. ajax(idelemento,url,dato,metodo)
  9. ajax(idelemento,url,dato,metodo,async)
  10. ajax(idelemento,url,dato,metodo,async)

De este modo si deseas trabajar en Javascript con el resultado obtenido usaras algo así:
Código Javascript:
Ver original
  1. var dato = "id="+id;
  2. var mivariable = ajax("mipagina.php",dato);
  3. alert(mivariable);
si deseas modificar un elemento del DOM podrías usar algo así:
Código Javascript:
Ver original
  1. var dato = "id="+id;
  2. ajax("#mielemento","mipagina.php",dato);
Note la aclaración #... El signo numeral indica que es un identificador de un elemento de la pagina por tanto es necesario que tenga en cuenta la sintaxis. Con la anterior fracción de código Javascript podría usted escribir el resultado obtenido en cualquier elemnto que soporte innerHTML, por ejemplo:
Código HTML:
Ver original
  1. <body id="mielemento">
  2. ...
  3. </body>
fichero: ajax.js
Código Javascript:
Ver original
  1. /*Funcion que permite Obtener un objeto XMLHttpRequest
  2.  /*para manejar la conexion(AJAX) desde JavaScript hacia el Servidor */
  3. function ObjetoXMLHttpRequest() {
  4.     var conexionxmlhttp;
  5.     if (window.XMLHttpRequest) {
  6.         // code for IE7+, Firefox, Chrome, Opera, Safari
  7.         // esto en caso de que el navegador lo soporte
  8.         conexionxmlhttp = new XMLHttpRequest();
  9.     } else {
  10.         // code for IE6, IE5
  11.         conexionxmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  12.     }
  13.     return conexionxmlhttp;
  14. }
  15.  
  16. function metodo_ajax(contenedor, url, dato, metodo, asincronico) {
  17.     //Se crea el objeto para manejar la conexion AJAX
  18.     var xmlhttp = ObjetoXMLHttpRequest();
  19.     //Funcion que va a procesar la peticion al servidor en caso de que se espere respuesta
  20.     xmlhttp.onreadystatechange = function () {
  21.         if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
  22.             var respuesta = new String();
  23.             respuesta = xmlhttp.responseText;
  24.             contenedor.innerHTML = respuesta;
  25.             document.body.appendChild(contenedor);
  26.         }
  27.     };
  28.     //Apertura para el envio de la peticion
  29.     xmlhttp.open(metodo, url, asincronico);
  30.     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  31.     xmlhttp.send(dato);
  32. };
  33.  
  34. function ajax(contenedor, url, dato, metodo, asincronico) {
  35.     var respuesta = null;
  36.     var eliminar = false;
  37.     var acceso = null;
  38.     if (typeof contenedor === "undefined") {
  39.         alert("Error de sintaxis: No ha dispuesto ningun parametro");
  40.     } else {
  41. //Preparamos las variable a utilizar
  42.         asincronico = asincronico || false;
  43.         if (contenedor[0] === "#") {
  44.             contenedor = contenedor.replace("#", "");
  45.             dato = dato || null;
  46.             metodo = metodo || "POST";
  47.             acceso = "id";
  48.         } else {
  49.             metodo = dato || "POST";
  50.             dato = url || null;
  51.             url = contenedor;
  52.             contenedor = "nk-contenedor-oculto-ajax";
  53.             eliminar = true;
  54.         }
  55. //Controlar el contenido de las variables
  56.         if (metodo !== "POST" && metodo !== "GET") {
  57.             alert("Error de sintaxis: El metodo " + metodo + " no existe");
  58.         } else {
  59.             //En caso de no existir un contenedor creamos uno temporal, «Escogi un textarea por sus propiedad de usar tanto innerHTML como value
  60.             if (contenedor === "nk-contenedor-oculto-ajax") {
  61.                 midiv = document.createElement('textarea');
  62.                 midiv.id = contenedor;
  63.                 midiv.setAttribute("hidden", "hidden");
  64.             } else {
  65.                 midiv = document.getElementById(contenedor);
  66.             }
  67.             if (midiv) {
  68.                 metodo_ajax(midiv, url, dato, metodo, asincronico);
  69.             } else {
  70.                 alert("Error de sintaxis: El objeto " + contenedor + " no existe")
  71.             }
  72.         }
  73.         var midiv = document.getElementById(contenedor);
  74.         respuesta = midiv.value;
  75.         if (eliminar) {
  76.             midiv.parentNode.removeChild(midiv);
  77.         }
  78.         midiv = null;
  79.         return respuesta;
  80.     }
  81. };

Finalmente les dejo una implementación CopyPaste:

fichero: respuesta.php
Código PHP:
<?php
    
echo "imagina que hiciste algo con ese " .  $_POST['id'];
?>
fichero: principal.html
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <head>
  3.         <meta charset="UTF-8">
  4.         <title>HTML Principal</title>
  5.         <script type="text/javascript" src="ajax.js"></script>
  6.         <script type="text/javascript">
  7.             function Enviame_al_Div(id) {
  8.                 dato = "id=" + id;
  9.                 ajax("#miDiv","resultado.php", dato);
  10.             }
  11.         </script>
  12.     </head>
  13.     <body>
  14.         <select id="miopcion" onclick="Enviame_al_Div(this.value)">
  15.             <option value="id-1">id-1</option>
  16.             <option value="id-2">id-2</option>
  17.             <option value="id-3">id-3</option>
  18.         </select>
  19.         <div id="miDiv"></div>
  20.     </body>
  21. </html>

Aun debo perfeccionar algunas cosas, pero esta bastante completo para mi.
  #2 (permalink)  
Antiguo 06/01/2015, 00:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: [Aporte] Ajax - Sin Librerias

Hola:

No sé la intención de complicarnos las cosas a los que no usamos librerías, y por lo tanto conocemos el funcionamiento del objeto XMLHttpRequest (Ajax), si tan solo hay que crear el objeto (lo más complicado sería discriminar navegadores), asignar las variables y si es necesario retocar cabeceras (por ejemplo para usar el método post). Luego hacer la petición y esperar la respuesta (no debes olvidarte de "XML").

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 06/01/2015, 10:35
 
Fecha de Ingreso: diciembre-2014
Ubicación: montería
Mensajes: 33
Antigüedad: 9 años, 4 meses
Puntos: 0
Sonrisa Respuesta: [Aporte] Ajax - Sin Librerias

Cita:
Iniciado por caricatos Ver Mensaje
No sé la intención de complicarnos las cosas a los que no usamos librerías
En particular, yo hasta hace poco usaba jQuery solo para implementar ajax, estuve buscando bastante información de como hacer algo como:

Código Javascript:
Ver original
  1. return xmlhttp.responseText;

No tuve mucho éxito, es mas creo haber leído que estaba fuera del contexto, así que lo único que se me ocurrió con mi poca experiencia en Javascript fue crear una serie de sucesos «artilugios» para conseguir mi cometido.

Es solo un pequeño aporte de 80 lineas comentado, para aquellos que apenas están comenzando como yo, mientras aprenden y luego prescindan de usarla.
  #4 (permalink)  
Antiguo 06/01/2015, 12:55
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: [Aporte] Ajax - Sin Librerias

Hola:

Cita:
Iniciado por NeaFan Ver Mensaje
En particular, yo hasta hace poco usaba jQuery solo para implementar ajax...
Es curioso que muchos que se dedican a hacer páginas web, han usado librerías sin saber usar javascript nativo, y ahora tienen que arreglar tantas cosas por los vicios que se adquieren por esa guisa (como usar enlaces sin enlazar, por ejemplo), y ajax sin librerías no es más que unas 10 líneas en los casos más sencillos... y hay mucha información en la web, aunque parece que se entra más fácilmente a las páginas que usan esas librerías (como la historía de Jesucristo y Barrabás)...



Cita:
Iniciado por NeaFan Ver Mensaje
... creo haber leído que estaba fuera del contexto
¡Je, pues esa línea es la que implementa toda librería...

Cita:
Iniciado por NeaFan Ver Mensaje
...
Es solo un pequeño aporte de 80 lineas comentado, para aquellos que apenas están comenzando como yo, mientras aprenden y luego prescindan de usarla.
Pues aunque la idea no la censuro, como te he comentado, veo tu aporte mucho más complejo de lo necesario...

Como nota adicional, te recomiendo que también busques el manejo XML, yo lo usao también para leer feeds, imágenes SVg, sitemaps, etc.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo

Etiquetas: ajax, php+javascript
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:32.