Foros del Web » Programando para Internet » Javascript »

duda de CARGANDO... con Ajax

Estas en el tema de duda de CARGANDO... con Ajax en el foro de Javascript en Foros del Web. Hola, que tal? Tengo un script en ajax que sirve para refrescar cieto div con informacion de un php. La duda que tengo es que ...
  #1 (permalink)  
Antiguo 29/10/2011, 01:00
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 12 años, 9 meses
Puntos: 8
duda de CARGANDO... con Ajax

Hola, que tal?

Tengo un script en ajax que sirve para refrescar cieto div con informacion de un php.
La duda que tengo es que a veces cuando monto el script en mi host, cuando accedo, se demora en cargar, entonces queria ver la manera de hacer para mostrar un mensaje mientras carga como: "Cargando...", en el mismo div donde se mostraria la informacion del php.

Este es mi codigo:
Código Javascript:
Ver original
  1. var http_request = false;
  2. function makePOSTRequest(url, parameters, funcion) {
  3.   http_request = false;
  4.   if (window.XMLHttpRequest) { // Mozilla, Safari,...
  5.      http_request = new XMLHttpRequest();
  6.      if (http_request.overrideMimeType) {
  7.         // set type accordingly to anticipated content type
  8.         //http_request.overrideMimeType('text/xml');
  9.         http_request.overrideMimeType('text/html');
  10.      }
  11.   } else if (window.ActiveXObject) { // IE
  12.      try {
  13.         http_request = new ActiveXObject("Msxml2.XMLHTTP");
  14.      } catch (e) {
  15.         try {
  16.            http_request = new ActiveXObject("Microsoft.XMLHTTP");
  17.         } catch (e) {}
  18.      }
  19.   }
  20.   if (!http_request) {
  21.      alert('Cannot create XMLHTTP instance');
  22.      return false;
  23.   }
  24.  
  25.   http_request.onreadystatechange = funcion;
  26.   http_request.open('POST', url, true);
  27.   http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  28.   http_request.setRequestHeader("Content-length", parameters.length);
  29.   http_request.setRequestHeader("Connection", "close");
  30.   http_request.send(parameters);
  31. }
  32.  
  33. function alertContents() {
  34.   if (http_request.readyState == 4) {
  35.      if (http_request.status == 200) {
  36.         //alert(http_request.responseText);
  37.         result = http_request.responseText;
  38.         document.getElementById('div').innerHTML = result;            
  39.      } else {
  40.         alert(http_request.status);
  41.      }
  42.   }
  43. }
  44.  
  45. function get() {
  46.   var poststr = "codigo=" + encodeURI( document.getElementById("producto_id").value );
  47.   makePOSTRequest('generar_producto.php', poststr, alertContents);
  48. }
Se que si el http_request.readyState es igual a 1, significa que todavia no esta completo, que recien se inicia el proceso. Pero no sabria como modificar mi codigo para poder mostrar el mensaje de "Cargando..." cuando todavia no se completa.

Alguna idea?

Muchas gracias!
  #2 (permalink)  
Antiguo 29/10/2011, 04:59
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: duda de CARGANDO... con Ajax

lee este tutorial
  #3 (permalink)  
Antiguo 29/10/2011, 21:36
 
Fecha de Ingreso: septiembre-2011
Mensajes: 158
Antigüedad: 12 años, 7 meses
Puntos: 15
Respuesta: duda de CARGANDO... con Ajax

TIENES QUE COMPROBAR EL ESTADO XXDD
ACA TE MODIFIQUE TU CODIGO PARA QUE DIGA QUE ESTA CARGANDO XD

Código:
var http_request = false;
function makePOSTRequest(url, parameters, funcion) {
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
     http_request = new XMLHttpRequest();
     if (http_request.overrideMimeType) {
        // set type accordingly to anticipated content type
        //http_request.overrideMimeType('text/xml');
        http_request.overrideMimeType('text/html');
     }
  } else if (window.ActiveXObject) { // IE
     try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
     } catch (e) {
        try {
           http_request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
     }
  }
  if (!http_request) {
     alert('Cannot create XMLHTTP instance');
     return false;
  }
  
  http_request.onreadystatechange = funcion;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);
}
 
function alertContents() {
  if (http_request.readyState == 4 && http_request.status == 200)  {
     
        //alert(http_request.responseText);
        result = http_request.responseText;
        document.getElementById('div').innerHTML = result;            
      
  }else{document.getElementById('div').innerHTML = "cargando...";}
}
 
function get() {
  var poststr = "codigo=" + encodeURI( document.getElementById("producto_id").value );
  makePOSTRequest('generar_producto.php', poststr, alertContents);
}
  #4 (permalink)  
Antiguo 30/10/2011, 07:53
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: duda de CARGANDO... con Ajax

Cita:
Iniciado por dleal100 Ver Mensaje
TIENES QUE COMPROBAR EL ESTADO XXDD
ACA TE MODIFIQUE TU CODIGO PARA QUE DIGA QUE ESTA CARGANDO XD
enseña a pescar, no le des los peces
  #5 (permalink)  
Antiguo 30/10/2011, 23:23
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: duda de CARGANDO... con Ajax

En mi codigo, para que sirve el:

Código Javascript:
Ver original
  1. http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  2.   http_request.setRequestHeader("Content-length", parameters.length);
  3.   http_request.setRequestHeader("Connection", "close");

Gracias!
  #6 (permalink)  
Antiguo 30/10/2011, 23:46
 
Fecha de Ingreso: septiembre-2011
Mensajes: 158
Antigüedad: 12 años, 7 meses
Puntos: 15
Respuesta: duda de CARGANDO... con Ajax

Cita:
Iniciado por morfasto Ver Mensaje
En mi codigo, para que sirve el:

Código Javascript:
Ver original
  1. http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  2.   http_request.setRequestHeader("Content-length", parameters.length);
  3.   http_request.setRequestHeader("Connection", "close");

Gracias!
eso sirve porque seve mas bonito ¿no crees XD? jajajajjja
no es sierto era broma XD

bueno no es necesario usar eso xD pero tendras que cambiar el metodo de envio si te das cuenta envias por POST, pero es mejor enviar datos por POST que por GET, asi que te aconsejo dejarlo todo como esta XD

enviar y resivir datos por GET es mas facil pero menos seguro ewe

PD: es para la codificacion de datos, la forma en que se mandan e interpretan los datos
  #7 (permalink)  
Antiguo 31/10/2011, 01:11
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: duda de CARGANDO... con Ajax

Lo que pasa es que cuando corro el codigo, en la consola me sale que esas lineas mandan error, pero si las saco, todo funciona bien y sin errores.

Son indispensables?
  #8 (permalink)  
Antiguo 31/10/2011, 01:18
 
Fecha de Ingreso: septiembre-2011
Mensajes: 158
Antigüedad: 12 años, 7 meses
Puntos: 15
Respuesta: duda de CARGANDO... con Ajax

Cita:
Iniciado por morfasto Ver Mensaje
Lo que pasa es que cuando corro el codigo, en la consola me sale que esas lineas mandan error, pero si las saco, todo funciona bien y sin errores.

Son indispensables?
elimina solo esta linea ya que abre una coneccion y la cierra, y eso no se ase desde las versiones de php 4

Código:
 http_request.setRequestHeader("Connection", "close");
y si te sigue dando problemas tambien elimina esta
v
v
Código:
  http_request.setRequestHeader("Content-length", parameters.length);

Última edición por dleal100; 31/10/2011 a las 01:32
  #9 (permalink)  
Antiguo 31/10/2011, 01:43
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: duda de CARGANDO... con Ajax

Veras.
Comenzamos con Peticiones HTTP.
El formato de una petición HTTP es de la siguiente forma:

<linea-petición>
<cabecera>
<linea en blanco>
[<cuerpo-petición>

Para mayor información sobre peticiones HTTP: (Buscar en google)

Concentrate en <cabeceras>

Cuando un navegador realiza una petición HTTP a un servidor, este manda una cadena de consultas llamada <cabeceras>

Las cabeceras proveen al servidor de información adicional que le será util para conocer como debe procesar dicha petición.

Dicho todo esto vamos a ver como luce una petción GET y una POST ambas definidas en HTTP

Petición GET

Código http:
Ver original
  1. GET / HTTP/1.1
  2. Host: www.forosdelweb.com
  3. User-Agent: Mozilla/7.0 (Windows..... etc.......
  4. Connection: Keep-Alive
  5.  
  6. [cuerpo]

Las cabeceras son: HOST que indica al servidor que la petición se refiere a www.forosdelweb.com

la versión HTTP 1.1 requiere de la cabecerá HOST, la 1.0 no la requiere

User-Agent, indica 2 cosas:
[*] Es la piedra angular de la mayor parte de la lógica para la detección del navedor[*] Indica que es accesible por los scripts tanto del lado del servidor como el del cliente.

Y por ultimo Connection: por defecto Keep-Alive === Te debo la explicación esta no me la sé.

---------------------------------------

Ya para no aburrirte. Vemos un ejemplo de una petición POST

NOTA: Una petición POST proporciona información adicional al servidor.

Código http:
Ver original
  1. POST / HTTP/1.1
  2. Host: www.forosdelweb.com
  3. User-Agent: Mozilla/7.0 etc.....
  4. Content-Type: application/x-www-form-urlencode
  5. Content-Length: [numero_de_parametros]
  6. Connection: Keep-Alive
  7.  
  8. [cuerpo de la petición = "PARAMETROS"]

Como puedes ver, las lineas 4,5 y 6 se parecen bastante a lo que tienes en tu código:

Código Javascript:
Ver original
  1. http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  2.   http_request.setRequestHeader("Content-length", parameters.length);
  3.   http_request.setRequestHeader("Connection", "close");

mmm bueno, supongo que con esto ya obtuviste la respuesta que buscabas.

==> Lo que hacen esas 3 lineas de tu código es configurar las cabeceras que constituirán la petición que se enviará al servidor.

Y como son definiciones de cabeceras hay que tener ciertas consideraciones.

Para resumir: Antes de enviar esas cabeceras debes tener especial cuidado en no imprimir nada desde el servidor.

Por ejemplo, en el caso de trabajar en asincrónico con un PHP, este PHP no deberá tener un echo, print, etc.. o un espacio en blanco antes de la etiqueta <?php porque puede ser interpretado por el navegador, o cualquier contenido html antes de la etiqueta <?php

Si ocurre alguno de estos casos el código no servirá, y como no estás tratando las excepciones o trabajando con lenguaje de servidor, [creo que] el navegador no te indicará error si no solamente tu código no funcionará.

Bueno, etc....

Y la segunda consideración es:

Investiga porque en la linea

Código Javascript:
Ver original
  1. http_request.setRequestHeader("Connection", "close");

dice "close"

Mira que pasa si le pones "Key-Alive"

Es todo, un saludo.

EDITO: JAJA no es "Key-Alive" si no "Keep-Alive"
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.

Etiquetas: ajax, cargando, funcion, html, php
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:59.