Foros del Web » Programando para Internet » Javascript »

xmlResponse Ajax Espera a que se cargue

Estas en el tema de xmlResponse Ajax Espera a que se cargue en el foro de Javascript en Foros del Web. Hola utilizo unas funciones javascript XMLResponse para cargar varias (capas)partes de una pagina, el problema es que en ved de detectar cuando esta cargada una ...
  #1 (permalink)  
Antiguo 05/08/2010, 08:52
 
Fecha de Ingreso: enero-2009
Mensajes: 55
Antigüedad: 15 años, 10 meses
Puntos: 5
xmlResponse Ajax Espera a que se cargue

Hola utilizo unas funciones javascript XMLResponse para cargar varias (capas)partes de una pagina, el problema es que en ved de detectar cuando esta cargada una parte para cargar la siguiente, lo hago con un temporizador de javascript(setTimeout("obtenerDatos('verList.asp', 'tablaReservas');",1700); ) con lo cual normalmente funciona pero si por lo que sea va mas lento el servidor una parte no se carga y devuelve error:
Este es el codigo:

function handleHttpResponse() {
if (http.readyState == 4) {
if (http.status == 200) {
if (http.responseText.indexOf('invalid') == -1) {
// Armamos un array, usando la coma para separar elementos
//results = http.responseText.split(",");
results = http.responseText.split(",,");
document.getElementById(cajaContenedor).innerHTML = results[0];
enProceso = false;
if(cajaContenedor=="campoMensaje"){document.getEle mentById("tablaReservas").innerHTML =""}
}
else
{
alert("Invalid Text");
}
}
else
{
document.getElementById(cajaContenedor).innerHTML = "Cargando " + http.status;
}
}
}
var entra=0;
function obtenerDatos(url,contenedor) {
if (!enProceso && http) {
//var valor = escape(document.getElementById("ddlViajes").value) ;
//var url = "verFechaViaje.asp?viaje="+ valor;
cajaContenedor = contenedor;
document.getElementById(cajaContenedor).innerHTML =
"<div style='color:#707070;' align='center'><strong>Cargando...</Strong> <img src='../Imagenes/cargandopeq.gif' alt='cargando'/><div>";
http.open("GET", url+"&ms="+new Date().getTime(), true);
http.onreadystatechange = handleHttpResponse;
enProceso = true;
http.send(null);
}
else
{
alert("En Proceso o No http");
enProceso = false; // lo usamos para ver si hay un proceso activo
http = getHTTPObject();
}
}

function getHTTPObject() {
var xmlhttp;
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
//alert("Si XMLHttpRequest");

}
catch (e) {
alert("No XMLhttpRequest");
}
}else
{
try{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
// alert("Si Msxml2.XMLHTTP");
}
catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
// alert("Si Microsoft.XMLHTTP");
}
catch (e) {
alert(" Actualice su navegador Web a una version mas reciente, para usar la aplicacion");
xmlhttp = false;
}
}
}
return xmlhttp;
}

Un Saludo y Muchas Gracias
  #2 (permalink)  
Antiguo 05/08/2010, 16:32
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: xmlResponse Ajax Espera a que se cargue

sucede que estas usando el mismo objeto XMLHttpRequest para todas tus peticiones. o sea, constantemente estas usando la variable global http. tienes varias soluciones segun te interese algunos detalles o no. por ejemplo, puedes hacer multiples peticiones al mismo tiempo pero cada objeto tiene que ser unico, por lo que necesitaras pasar ese objeto como parametro de las funciones que manejan la peticion. sin embargo, puede entenderse que estas sobrecargando el servidor al realizar multiples peticiones a la vez.

si quieres cargar uno a uno de forma secuencial cada vez que una peticion termine, tendrias que crear un array que contenga las URLs a cargar y la referencia del elemento donde se depositara el contenido. luego tendrias que verificar cuando la peticion se realizo para continuar con la proxima peticion. basicamente revisarias el estado de la peticion para determinar si este se realizo y luego continuas con la proxima peticion. quizas tambien necesites un temporizador si la peticion se demora mucho, asi puedes continuar con el resto en lugar de no cargar los que falten.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: ajax, espera
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 08:51.