Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Aporte: Clase para envío y recepción de datos de manera asincrónica

Estas en el tema de Aporte: Clase para envío y recepción de datos de manera asincrónica en el foro de Frameworks JS en Foros del Web. Hola a todos. Quiero contribuir con esta clase que hice que me ha servido de mucho en lo que llevo trabajando con ajax. Algunos comentarios ...
  #1 (permalink)  
Antiguo 05/01/2009, 22:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Aporte: Clase para envío y recepción de datos de manera asincrónica

Hola a todos. Quiero contribuir con esta clase que hice que me ha servido de mucho en lo que llevo trabajando con ajax.
Algunos comentarios acerca de que es lo que les permite hacer:

  • Enviar formularios de manera asincrónica
  • Cargar páginas de manera asincrónica
  • Envío de datos mediante POST o GET
  • Tres formatos de respuesta:
    • texto
    • xml
    • json
  • Tres eventos aceptados: al cargar, antes de completarse y una vez que se ha completado la carga
Ejemplo de uso

Enviando un formulario con HttpRequest

Código javascript:
Ver original
  1. function send_form(form_id)
  2. {
  3.  
  4.         var request = new HttpRequest();
  5.  
  6.         request.setMethod('POST');
  7.         request.setResponseType(3);         // RESPUESTA CON FORMATO JSON
  8.  
  9.         request.onload = function(){
  10.              alert('Enviando...');
  11.         }
  12.  
  13.         request.oncomplete = function(){
  14.              var response = request.getResponse();
  15.              alert(response.success);
  16.         }
  17.  
  18.         request.sendForm(form_id);
  19.  
  20. }


Espero que a alguien más le sea útil. Por supuesto, cualquier sugerencia, crítica, aporte, duda, siempre será bienvenida.

Código javascript:
Ver original
  1. /************************************************
  2.   HTTPREQUEST
  3.   -----------------------------------------------
  4.   Envia y recibe datos de manera asincrónica.
  5.   -----------------------------------------------
  6.   + loadAsync(url:String, f:Function, method:String)
  7.   + addVar(value:Var)
  8.   + getResponse():(String|XmlString|Json)
  9.   + getState():Int
  10.   + getStatus():Int
  11.   + getMethod():String
  12.   + getResponseType():Int
  13.   + setMethod(value:String)
  14.   + setResponseType(value:Int)
  15.   - initialize()
  16.   - create():AjaxObject
  17.   - createQueryString()
  18.   -----------------------------------------------
  19. ************************************************/
  20.  
  21. function HttpRequest()
  22. {
  23.     var request;
  24.     var response;
  25.     var method;
  26.     var responseType;
  27.     var vars;
  28.     var varsLength;
  29.     var instance;
  30.    
  31.     var RESPONSE_TYPE_TEXT = 1;
  32.     var RESPONSE_TYPE_XML  = 2;
  33.     var RESPONSE_TYPE_JSON = 3;
  34.    
  35.     var READY_STATE_UNINITIALIZED  = 0;
  36.     var READY_STATE_LOADING           = 1;
  37.     var READY_STATE_LOADED         = 2;
  38.     var READY_STATE_BEFORECOMPLETE = 3;
  39.     var READY_STATE_COMPLETE       = 4;
  40.    
  41.     instance = this;
  42.    
  43.     initialize();
  44.    
  45.     // Inicializa por defecto el objeto HttpRequest
  46.     function initialize()
  47.     {
  48.         request = create();
  49.         method  = 'GET';
  50.         responseType = RESPONSE_TYPE_TEXT;
  51.         vars = new Array();
  52.         varsLength = 0;
  53.     }
  54.    
  55.     // Crea el objeto Ajax
  56.     function create()
  57.     {
  58.         if ( window.XMLHttpRequest )
  59.             return new XMLHttpRequest;
  60.         else if ( window.ActiveXObject )
  61.             return new ActiveXObject('Microsoft.XMLHTTP');
  62.         else
  63.             return null;
  64.     }
  65.    
  66.     // Crea la cadena variable=valor que se envia junto con la petición al servidor
  67.     function createQueryString()
  68.     {        
  69.         if ( vars.length == 0 || method.toLowerCase() == 'get' )
  70.             return null;
  71.        
  72.         var i;
  73.         var end;
  74.         var querystring;
  75.        
  76.         end = vars.length;
  77.         querystring = vars[0];    
  78.         for ( i=1 ; i<end ; i++ )
  79.             querystring += '&' + vars[i];
  80.            
  81.         return querystring;
  82.     }
  83.    
  84.     // Se ejecuta cuando la petición está en el estado 2
  85.     this.onload             = function(){return false;}
  86.     // Se ejecuta cuando la petición está en el estado 3
  87.     this.onbeforecomplete     = function(){return false;}
  88.     // Se ejecuta cuando la petición ha finalizado en su totalidad
  89.     this.oncomplete         = function(){return false;}
  90.    
  91.     // loadAsync: Carga una url de manera asincrónica
  92.     // Args -> url: página que se va  a cargar
  93.     //           f: función que se va a ejecutar cuando la petición finalice
  94.     //           m: método por el que se envian las variables (GET|POST)
  95.     this.loadAsync = function(url,f,m)
  96.     {
  97.         var handler;
  98.         var instance;
  99.        
  100.         handler = arguments[1] || this.oncomplete;    
  101.         method  = arguments[2] || method;        
  102.        
  103.         instance = this;
  104.         request.onreadystatechange = function()
  105.         {
  106.             switch ( request.readyState )
  107.             {
  108.                 case 2:
  109.                            instance.onload.call();
  110.                         break;
  111.                 case 3:
  112.                         instance.onbeforecomplete.call();
  113.                         break;
  114.                 case 4:
  115.                         handler.call();
  116.                         break;
  117.                 default:
  118.                         break;
  119.             }
  120.         }
  121.  
  122.         request.open(method,url,true);
  123.         if ( method.toLowerCase() == 'post' )
  124.         {
  125.             request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  126.             request.setRequestHeader("Content-length", varsLength);
  127.         }
  128.         request.send(createQueryString());
  129.     }
  130.    
  131.     this.sendForm = function(formId){
  132.        
  133.         var form = document.getElementById(formId);
  134.         var elementsCount = form.elements.length;
  135.         var element;
  136.  
  137.         for ( i=0 ; i<elementsCount ; i++ )
  138.         {
  139.             element = form.elements[i];
  140.             switch(element.type.toLowerCase())
  141.             {
  142.                 case 'text':
  143.                 case 'textarea':
  144.                 case 'checkbox':
  145.                 case 'radiobutton':
  146.                 case 'hidden':
  147.                 case 'password':
  148.                     instance.addVar(element.name+'='+element.value);
  149.                     break;
  150.                 case 'select-one':
  151.                     instance.addVar(element.name+'='+element.options[element.selectedIndex].value);
  152.                     break;
  153.                 default:
  154.                     break;
  155.             }
  156.         }
  157.        
  158.         instance.loadAsync(form.action);
  159.        
  160.     }
  161.    
  162.     // addVar: Agrega una cadena de tipo variable=valor para enviar al servidor
  163.     // Args -> value: cadena de tipo variable=valor que se agrega
  164.     this.addVar = function(value)
  165.     {
  166.         vars[vars.length] = value;
  167.         varsLength += value.length;
  168.     }    
  169.    
  170.     // getResponse: Devuelve la respuesta del servidor
  171.     this.getResponse = function()
  172.     {
  173.         switch ( responseType )
  174.         {
  175.             case 1:
  176.                     return request.responseText;
  177.                     break;
  178.             case 2:
  179.                     return request.responseXML;
  180.                     break;
  181.             case 3:
  182.                     return eval('('+request.responseText+')');
  183.                     break;
  184.             default:
  185.                     break;
  186.         }
  187.     }
  188.    
  189.     // getState: Devuelve el estado en el que se encuentra la petición actual
  190.     this.getState = function()
  191.     {
  192.         return request.readyState;
  193.     }
  194.    
  195.     // getStatus: Devuelve el estado en el que terminó la petición actual
  196.     this.getStatus = function()
  197.     {
  198.         return request.status;
  199.     }
  200.    
  201.     // getMethod: Devuelve el método utilizado en la petición actual
  202.     this.getMethod = function()
  203.     {
  204.         return method;
  205.     }
  206.    
  207.     // setMethod: Establece el método en el que se enviarán las variables al servidor
  208.     this.setMethod = function(value)
  209.     {
  210.         method = value;
  211.     }
  212.    
  213.     // getResponseType: Devuelve el tipo de respuesta que tendrá el servidor en la petición actual
  214.     this.getResponseType = function()
  215.     {
  216.         return responseType;
  217.     }
  218.    
  219.     // setResponseType: Establece el tipo de respuesta que queremos obtener del servidor con la petición actual
  220.     this.setResponseType = function(value)
  221.     {
  222.         responseType = value;
  223.     }
  224.  
  225. }
__________________
Add, never Remove
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 20:43.