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

Ajax dynamic content

Estas en el tema de Ajax dynamic content en el foro de Frameworks JS en Foros del Web. Hola a todos, Buscando por ahi un metodo para actualizar fácilmente el contenido de las páginas me he encontrado con este script que era justo ...
  #1 (permalink)  
Antiguo 03/10/2006, 18:01
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
Pregunta Ajax dynamic content

Hola a todos,

Buscando por ahi un metodo para actualizar fácilmente el contenido de las páginas me he encontrado con este script que era justo lo que quería.

http://www.dhtmlgoodies.com/index.ht...ynamic-content

El problema es que al bajarme los archivos resulta que no funciona, ni en local ni subiendolo al servidor. Pero sin embargo su demo online si que parece funcionar.
He comparado los archivos y no veo ninguna diferencia. ¿Alguien sabe que puede estar pasando?

Gracias por adelantado.
__________________
Guarda tus configuration files
  #2 (permalink)  
Antiguo 04/10/2006, 00:57
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
como bien te indican en la página... lo ejecutas desde servidor HTTP o simplemente cargas el fichero desde tu disco duro con el navegador???
  #3 (permalink)  
Antiguo 04/10/2006, 04:38
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
Tengo un servidor en local, y tambien he probado a subirlo al hosting y nada.
__________________
Guarda tus configuration files
  #4 (permalink)  
Antiguo 04/10/2006, 05:38
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
Puedes darme la URL donde lo tengas colgado o abrir tu conexión y darme tu ip de hoy?

Es para verlo...
  #5 (permalink)  
Antiguo 04/10/2006, 08:03
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
http://ninibe.com/ajax/ajax-dynamic-content.html

Lo de cargar abajo lo puse yo, y tampoco funciona. Seguro que es una tontería, pero no entiendo que pasa.

¿Tu has probado el ejemplo y te funciona?
__________________
Guarda tus configuration files
  #6 (permalink)  
Antiguo 04/10/2006, 10:15
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
Pues la verdad es que lo he mirado y tampoco me va ni me da fallos de ningún tipo... He ojeado el codigo de la libreria y no me convence nada la forma que tienen de hacerlo... te aconsejaría que usaes otras librerías o un codigo menos liado.

Lo raro es que en la demo de la pagina si que va bien... Creo que puede ser por el echo de que las llamadas a ajax se incluyen en el cuerpo del propio documento. No es bueno trabajar con DOM antes de haber terminado de cargar este.

Prueba a meter esas llamadas den el onload de la etiqueta body de tu página a ver si así al menos van...

Luego deberías editar las librerías (al menos la que hace los cambios, la que crea el objeto ajax creo que está bien) e ir metiendo alerts en algunas partes para comprobar en que momento deja de producirse el alert (lo que significará que antes de llegar ahí el proceso se detubo por algún motivo).


Otra cosa que me extraña es que se define un generador de un objeto para ajax pero luego no veo donde se crea el propio objeto... :P
  #7 (permalink)  
Antiguo 04/10/2006, 11:04
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
Con el body onLoad tampoco van. De javascript entiendo lo justo asi que mejor no edito la librería porque me la voy a cargar.

¿Conoces alguna otra librería que haga esto mismo? Es que esta era perfecta, una función que te cargue el contenido de un archivo en una div y nada más.
__________________
Guarda tus configuration files
  #8 (permalink)  
Antiguo 04/10/2006, 12:06
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
librerias hay a patadas quizá la mas interesante es prototype pero es muy pesada...

Si lo unico que quieres es recargar un div por id te bastará con una función como esta (en realidad 2 pero la primera solo crea el objeto xmlhttprequest):

Código:
function cXHR(){ var XHR=false; if (window.ActiveXObject){XHR=new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest){XHR=new XMLHttpRequest();}if(XHR)return XHR;else alert("Error: AJAX no funciona en su navegador actualicelo.");}

function ajax(id_div,URL_a_cargar) {
	XHR=cXHR(); XHR.open( "GET", URL_a_cargar , true );
	XHR.onreadystatechange=function(){
                   if (XHR.readyState==4)	
                      if (XHR.status==200) document.getElmentById(id_div).innerHTML=XHR.responseText;
                      else if(XHR.status==404) alert("Error: La página llamada con AJAX no existe");
                           else alert("Error "+XHR.status+": "+XHR.statusText);}
        XHR.send(null);}
asi con "ajax(id_de_tu_div, URL_a_Carga);" realizarás el cambio.

Con esto te bastará... (puede que le falle algún punto y coma, revisalo :P)
  #9 (permalink)  
Antiguo 04/10/2006, 13:32
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
Solo faltaba una e en getElementById.

Con esta función pasan cosas muy raras.

http://ninibe.com/ajax/ajax.html

Nada más entrar carga solo la ultima div, al rato carga la segunda con el archivo de la tercera y si en el explorer (en firefox no) le das para atrás y para delante otra vez aparece de repente todo bien.

Yo es que con el javascript me pierdo.
__________________
Guarda tus configuration files
  #10 (permalink)  
Antiguo 04/10/2006, 13:41
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
He estado haciendo pruebas y el problema aparece al usar más de una capa, si solo dejas una (cualquiera de ellas) funciona perfectamente, sino solo funciona la ultima.
__________________
Guarda tus configuration files
  #11 (permalink)  
Antiguo 04/10/2006, 16:19
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
claro eso es porque para hacerlo facil siempre mando crear un objeto xmlhttprequest con el mismo nombre. Ese es el objeto encargado de cargar los contenidos externos... si lo creo con el nombre XHR y luego creo otro con el mismo nombre me acabo de cargar al primero :P

vamos a modificarlo para que sea un array y así cada vez sea un objeto xmlhttprequest distinto y al crear uno no nos carguemos el anterior... también añado el borrar el objeto cuando lo haya pasado ya dentro del div para que no se llene la memoria de objetos inutiles.

La verdad es que esta función puede mejorarse y mucho! pero de momento creo que te valdrá.

Código:
XHR= new Array;

function cXHR(){ var XHR=false; if (window.ActiveXObject){XHR=new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest){XHR=new XMLHttpRequest();}if(XHR)return XHR;else alert("Error: AJAX no funciona en su navegador actualicelo.");}



function ajax(id_div,URL_a_cargar) {
	n=XHR.length;
	XHR[n]=cXHR(); 
	XHR[n].open( "GET", URL_a_cargar , true );
	XHR[n].onreadystatechange=function(){
                   if (XHR[n].readyState==4)	
                      if (XHR[n].status==200) { document.getElmentById(id_div).innerHTML=XHR[n].responseText; XHR[n]="";}
                      else if(XHR[n].status==404) alert("Error: La página llamada con AJAX no existe");
                           else alert("Error "+XHR[n].status+": "+XHR[n].statusText);}
        XHR[n].send(null);}
  #12 (permalink)  
Antiguo 05/10/2006, 18:14
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
http://ninibe.com/ajax/ajax.html

Sigue haciendo lo mismo
__________________
Guarda tus configuration files
  #13 (permalink)  
Antiguo 06/10/2006, 03:22
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
prueba a poner un var delante de la "n=" y si sigue sin ir te paso otr afuncion esta tarde.
  #14 (permalink)  
Antiguo 06/10/2006, 06:26
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
Ahora si que si!!!

Muchisimas gracias por todo ikhuerta.
__________________
Guarda tus configuration files
  #15 (permalink)  
Antiguo 06/10/2006, 06:35
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
De nada hombre!

y perdona por los fallos, es lo que tiene escribir sin probar el codigo... no podía colgarte mis librerias porque se supone que son propiedad de la empresa, sorry :(
  #16 (permalink)  
Antiguo 06/10/2006, 08:06
 
Fecha de Ingreso: enero-2004
Mensajes: 95
Antigüedad: 20 años, 9 meses
Puntos: 1
No te preocupes, con esto tengo lo necesario para lo que quiero hacer. Y además no ocupa nada.

Gracias de nuevo.
__________________
Guarda tus configuration files
  #17 (permalink)  
Antiguo 12/10/2006, 11:22
 
Fecha de Ingreso: julio-2006
Mensajes: 6
Antigüedad: 18 años, 4 meses
Puntos: 0
Saludes a todos, estoy tratando de implementar ajax para evitar la molestia recarga en mis paginas, pero he tenido un problema, el asunto es que puede cargar unas paginas usando IE, netscape, y firefox, pero en opera no logro hacer que cargue mis paginas, el codigo q utilizo es el siguiente:

function ini(){
var XMLHttpRequestObject = false;

if ((window.XMLHttpRequest) && (window.XMLHttpRequest != 'undefined')) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
XMLHttpRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e1) {
alert('Su navegador no posee las caracteristicas necesarias para visualizar la aplicacion');
}
}
}
return XMLHttpRequestObject;
}

function getData(met,dataSource) {

XMLHttpRequestObject = ini();

if (XMLHttpRequestObject) {
met = met.toUpperCase();

XMLHttpRequestObject.open(met,dataSource,true);

if (met == 'POST'){
XMLHttpRequestObject.setRequestHeader("Method", "POST " + dataSource + " HTTP/1.1")
XMLHttpRequestObject.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}

XMLHttpRequestObject.onreadystatechange = obt_contenido;

if (met == 'POST')
XMLHttpRequestObject.send(crear_arreglo());
else
XMLHttpRequestObject.send(null);
}
}


function obt_contenido() {

if(XMLHttpRequestObject.readyState == 1){
if (document.layers){
this.document.layers["precarga"].innerText = "Cargando........";
} else if (document.all){//Para IE
this.document.all["precarga"].innerHTML = "Cargando........";
} else if (document.getElementById){ // Para Netscape, Firefox
document.getElementById("precarga").innerHTML = "Cargando........";
}

}else if (XMLHttpRequestObject.readyState == 4){

if (XMLHttpRequestObject.status == 200) {
//this.document.write(XMLHttpRequestObject.responseT ext);

if (document.layers){
this.document.layers["contenedor"].innerText = XMLHttpRequestObject.responseText;
this.document.layers["precarga"].innerText = "Carga Terminada";
} else if (document.all){//Para IE
this.document.all["contenedor"].innerHTML = XMLHttpRequestObject.responseText;
this.document.all["precarga"].innerHTML = "Carga Terminada";
} else if (document.getElementById){ // Para Netscape, Firefox
document.getElementById("contenedor").innerHTML = XMLHttpRequestObject.responseText;
document.getElementById("precarga").innerHTML = "Carga Terminada";
}

} else if (XMLHttpRequestObject.status == 404){
alert("La página que desea vizualizar no existe");
}else{
//mostramos el posible error
alert("Error: " + XMLHttpRequestObject.status);
}
}
}

function crear_arreglo(){
var objetos = new Array();

var mnu = this.document.getElementsByTagName("input");
var cant_input = mnu.length;
//Almacena en el arreglo los valores de los objetos input
for (var i=0; i < cant_input; i++){
objetos[i] = new Array();
objetos[i][0] = mnu[i].name;
objetos[i][1] = mnu[i].value;
}

var slt = this.document.getElementsByTagName("select");
var cant_select = slt.length;

//Almacena en el arreglo los valores de los objetos select
for(var i=0; i < cant_select; i++){
var idx = cant_input + i;
objetos[idx] = new Array();

objetos[idx][0] = slt[i].name;
var index = slt[i].selectedIndex;
objetos[idx][1] = slt[i].options[index].value;
}

var txtarea = this.document.getElementsByTagName("textarea");
var cant_txtarea = txtarea.length;

//Almacena en el arreglo los valores de los objetos textarea
for(var i=0; i < cant_txtarea; i++){
var idx = cant_input + cant_select + i;
objetos[idx] = new Array();
objetos[idx][0] = txtarea[i].name;
objetos[idx][1] = txtarea[i].value;
}

//Crea la cadena que contendra las variables a pasarse por el metodo POST
var cadena = "";
for(var j=0; j < objetos.length; j++){
cadena += objetos[j][0] + "=" + objetos[j][1];
if (j != (objetos.length - 1))
cadena += "&";
}
return cadena;

}

Espero me puedan ayudar, ya que la verdad no se que esta pasando porque se supone que opera reconoce el getElementById, y no lo esta haciendo.

Gracias por la ayuda
  #18 (permalink)  
Antiguo 13/10/2006, 05:47
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
Lo siento, yo no trabajo para Opera. (solo me exigen IE y FF). No puedo ayudarte.
  #19 (permalink)  
Antiguo 13/10/2006, 09:44
 
Fecha de Ingreso: julio-2006
Mensajes: 6
Antigüedad: 18 años, 4 meses
Puntos: 0
Que lastima que no puedas ayudarme ikhuerta, seguire buscando la solucion, ya que me parece que las pagianas a desarrollarse no deben estar limitadas a los navegadores para vizualizarse correctamente, por eso acostubro ver los resultados en varios navegadores.

Gracias por tu mensaje. Saludos
  #20 (permalink)  
Antiguo 14/10/2006, 08:01
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 18 años, 1 mes
Puntos: 0
Cuando te piden resultados a termino de tiempo especifico ya pactas que navegadores interesan y que otros dejas un poco de lado. Hoy por hoy explorer es el rey siempre con creo que un 85% de los naveganges. Firefox se lleva casi el 10% y porcentaje restante se lo reparten los demas... En definitiva que realmente no tengo tiempo para dedicarle a opera.

Sin animos de desmontar tu bien intencionada filosofía, te diré que también existen navegadores para Linux y Mac que seguramente no estás teniendo en cuenta (por no poder, probarlo, claro). Algunos ni siquiera pueden manejar bien javascript y menos ajax...

Yo creo 2 cosas.

1) Que el problema real lo tienen los navegadores y si bien hay que hacerles algo de caso no podemos perder la mitad del tiempo de trabajo desarrollando para un navegador que no se lleva ni el 5% de los navegantes.

2) Que todos los que manejan algo distinto a explorer saben que si algo no va en sus navegadores solo tienen que poner explorer para que vaya (o si no intenta comprar cosas por interent con firefox y verás que sorpresas te dan los bancos).
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 05:40.