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

Error con Explorer

Estas en el tema de Error con Explorer en el foro de Frameworks JS en Foros del Web. Hola a todos. Antes ya había usado los controles XMLHTTP en aplicaciones con VB y con C++, pero no había tenido un problema similar a ...
  #1 (permalink)  
Antiguo 23/11/2005, 11:55
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Error con Explorer

Hola a todos.
Antes ya había usado los controles XMLHTTP en aplicaciones con VB y con C++, pero no había tenido un problema similar a este. Bueno, pues pongo el código en un documento HTML (ya intenté con VBS además de con JavaScript ), nada distinto a lo que he visto que ya publicado en este foro. Cargo el documento espero a que la función de CallBack devuelva un código de estado 4.
Hasta ese punto todo funciona bien. Cuando analizo el contenido del documento devuelto con responseText, devuelve como se espera el texto de todo el documento XML en Firefox y en IE también. Pero, si trato de acceder a la estructura del documento con responseXML, sólo me funciona en Firefox.
Ahora, en este punto, supuse que todo debía ser simplemente un problema con los tipos MIME. Así que reviso las asignaciones del servidor para los XML estáticos... Todo bien. Reviso que los XML que se generan dinámicamente tengan la indicación correcta (ASP: Response.ContentType = "text/xml")... todo está correctamente asignado. Supuse que de alguna manera el MIME no se estaba asignando, así que imaginen mi extrañeza al solicitar los encabezados de los XML desde mi script y ver que efectivamente tienen el MIME "text/xml" asignado. Si todo está bien asignado del lado del server, si efectivamente el server devuelve un xml (y ya verifiqué que esté bien formateado), si los navegadores con los que hice pruebas obtienen los datos de este XML como texto y además Firefox es capaz de usar la estructura de este XML, ¿porque IE no entrega la estructura del XML?
Al final me he rendido y puse una función extra sólo para crear el documento XML "real".
Código:
function get_DOM_DOC(XMLReq){
    //Verificamos que la etiqueta del nodo raiz exista en el texto
    //y si existe, verificamos si existe en la estructura XML
    //en caso de que no exista, intentamos crear la estructura
    //a partir del texto en responseText
    if(XMLReq.responseText.indexOf("<datos>")!=-1 &&
        XMLReq.responseXML.documentElement==null){
        var xmlDoc;
        //ProgIDs de los posibles ActiveX
        var progIdDOM_DOC = [
            "Msxml2.DOMDocument.4.0",
            "Msxml2.DOMDocument.3.0",
            "MSXML2.DOMDocument",
            "MSXML.DOMDocument"];
        for(var i=0; !_xmlDoc && i<progIdDOM_DOC.length; i++){
            try {
                xmlDoc = new ActiveXObject(progIdDOM_DOC[i]);
            }catch(ex){
                xmlDoc = false;
            }
        }

        if(xmlDoc){
            xmlDoc.async = false;
            //El texto del documento es válido así que
             //podemos crear un documento XML con él
            xmlDoc.loadXML(XMLReq.responseText);
        }
        return xmlDoc;
    }
    return XMLReq.responseXML;
}
Una vez que tengo un objeto XMLHttpRequest (FF) o XMLHTTP (IE) válido, en la función de callBack, ahora uso este código:
Código:
if(xmlHTTP.status==200){
    var xmlDOC = get_DOM_DOC(xmlHTTP);
    //Sólo para verificar que existe una estructura XML válida
    alert(xmlDOC.documentElement.nodeName);
}
Aqui fue donde me enteré que esta técnica se llama Ajax, buscando algo de información sobre el problema. Ahora mismo, ya funciona esto, y puedo acceder a la estructura del XML tanto en IE como FF usando la función anterior.
Pero, me queda la duda sobre IE, y aún más al ver que otros sencillos scripts en la red que toman responseXML sin mayor preoucupación (no me funcionó ninguno). Todo lo que encontré funcionando usaba solamente responseText que no sirve para mi aplicación.
Como seguramente ustedes tienen más experiencia en esto de AJAX y problemas con los nevegadores, espero que me puedan indicar cuál ha sido mi error.
Ah, y lo probé en los tres equipos que tengo a mano. Nunca funcionó con IE el método responseXML.

Saludos.

Última edición por Beakdan; 23/11/2005 a las 12:09
  #2 (permalink)  
Antiguo 23/11/2005, 15:16
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 20 años
Puntos: 7
Dale un vistazo a la dirección de abajo, talvez es tu caso...
http://www.quirksmode.org/blog/archi...p_notes_r.html

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 30/11/2005, 05:33
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 21 años
Puntos: 0
Hombre comentemos esto un poco mas aquí no?

Pero al final que es, un bug de explorer o una forma de restrición o que e lo que e!!! Tengo el mismo problema!!

Cita:
In the end I sidestepped it and used hidden IFRAME buffers in MSIE (both Win and Mac), Opera 7, and Safari 1.0-1.1, and XMLHttpRequest in Mozilla/Safari1.2+/Opera8+. That approach worked very well for retrieving remote HTML content (which was my design goal too).
Esto que quiere decir, que guardo el contenido de la respuesta que obtengo en el buffer de un iframe oculto y desde ahi pasarle la info al <div id="dcontenido">? Y esto como se traduce? A que genero las consultas desde ese iframe i simplemente tranfiero la info de un div a otro?

Alguien que utilice esta técnica puede explicar mas detalladamente en que consiste?

Justo tengo una página casi funcionando cuando al testear desde IE me encuentro con este mismo error, este post y el resto.

Vuestras experiencias con este tema?

Saludos
  #4 (permalink)  
Antiguo 01/12/2005, 08:27
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 21 años
Puntos: 0
Ya se que la pregunta no estaba bien planteada, la parte del iframe y su buffer.

Vaya problemón.
  #5 (permalink)  
Antiguo 01/12/2005, 16:10
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
xknown:
Gracias por responder, pero no, el link pusiste no tiene relación con mi problema. Y digo que no tiene relación con mi problema porque no quiero obtener contenido HTML, y además, el MIME para los archivos es text/xml (como se supone que debe ser). Pero, ha sido muy útil en el sentido de que veo que la solución que he hecho no ha sido descabellada...

tralara:
En la cita que pones, tratan de obtener contenido HTML. Pero ese no es el objetivo de mi aplicación. Yo obtengo documentos XML a partir de consultas a una base de datos. Pero como antes mencioné, por alguna razón el responseXML no entrega un documento válido con IE, aún cuando el responseText sí contiene el texto del XML. Lo solucioné con un objeto DOMDocument para IE, aunque supongo que no debería ser así. Como sea, mi aplicación está casi terminada, pero no me gusta quedarme con la duda. Lo que no comprendo es como en algunas referencias que he investigado usan "impunemente" responseXML sin mayor preocupación. Aunque en realidad no he visto ninguna aplicación que utilice realmente XML, y sí un montón de aplicaciones que usan responseText e innerHTML...

Última edición por Beakdan; 01/12/2005 a las 16:22
  #6 (permalink)  
Antiguo 02/12/2005, 20:09
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 20 años, 5 meses
Puntos: 4
trata de evitar el xml porque es casi el doble de informacion que hay que recibir y encima el tiempo que tarda el explorador en interpretarlo.
__________________
Internet Explorer SuckS
Download FireFox
  #7 (permalink)  
Antiguo 03/12/2005, 13:40
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Cita:
trata de evitar el xml porque es casi el doble de informacion que hay que recibir
Ahora sí que me he confundido ¿cómo es que con xml voy a tener el doble de información?
  #8 (permalink)  
Antiguo 03/12/2005, 16:30
Avatar de Viet  
Fecha de Ingreso: octubre-2003
Ubicación: Mar del Plata - Argentina
Mensajes: 247
Antigüedad: 21 años, 2 meses
Puntos: 2
Hola.

Lo que te intenta decir es que la cantidad (bytes/caracteres enviados) de xml termina siendo mas del doble de los necesarios si transmites por texto plano.

ej :

Código PHP:
  <persona>
     <
nombre>marcos</nombre>
     <
id>4</id>
  </
persona>
  <
persona>
     <
nombre>luis</nombre>
     <
id>5</id>
  </
persona

contra
Código PHP:
    marcos|4
    luis
|

__________________
Keep it simple and keep it fast.
  #9 (permalink)  
Antiguo 03/12/2005, 17:25
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Pues, en ese caso, el problema es de definición...
Código:
<p a="4">marcos</p>
<p a="5">luis</p>
 
Y la ventaja obtenida por la facilidad de manipular los datos, compensa con creces una cadena de texto cruda. En al caso de lo que estoy haciendo, la estructura xml que debo procesar es un árbol. Si tuviera en texto plano la representación del mismo, podría completar lo que requiero (con expresiones regulares) pero a costa de una mayor complejidad. Bueno, por lo menos a mi así me ha parecido.

  #10 (permalink)  
Antiguo 09/02/2006, 05:33
 
Fecha de Ingreso: octubre-2004
Mensajes: 878
Antigüedad: 20 años, 2 meses
Puntos: 1
Soy nuevo en ajax y tengo el mismo problema que tu, buscando por google he encontrado esta pagina donde dan una solución:
http://forum.java.sun.com/thread.jsp...590&tstart=105

A mi me funciona pero no se si es un poco rebuscada y hay otra cosa mas sencilla...

El codigo es este:

Código:
//Just to check if it is a different navigator from internet explorer
if (document.implementation && document.implementation.createDocument){
xmlDoc = requester.responseXML;
//In case to be the internet explorer
} else if (window.ActiveXObject){
//Create a xml tag in run time
var testandoAppend = document.createElement('xml');
//Put the requester.responseText in the innerHTML of the xml tag
testandoAppend.setAttribute('innerHTML',requester.responseText);
//Set the xml tag's id to _formjAjaxRetornoXML
testandoAppend.setAttribute('id','_formjAjaxRetornoXML');
//Add the created tag to the page context
document.body.appendChild(testandoAppend);
//Just for check put the xmlhttp.responseXML in the innerHTML of the tag
document.getElementById('_formjAjaxRetornoXML').innerHTML = requester.responseText;
//Now we can get the xml tag and put it on a var
xmlDoc = document.getElementById('_formjAjaxRetornoXML');
//So we have a valid xml we can remove the xml tag document.body.removeChild(document.getElementById('_formjAjaxRetornoXML'));\n" +
}
else{
//If the browser doesnt support xml
alert('Your browser can\\'t handle this script');
}
  #11 (permalink)  
Antiguo 17/04/2006, 09:20
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años, 7 meses
Puntos: 2
Mismo problema

Tengo el mismo problema que Beakdan, o al menos muy parecido.

Beakdan:
He usado tu funcion, pero me sigue pasando exactamente lo mismo

wakewakeup:
Tambien he usado tu metodo, pero nada, el mismo error

Alguna ayuda por favor??
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
  #12 (permalink)  
Antiguo 09/06/2006, 15:07
 
Fecha de Ingreso: febrero-2006
Mensajes: 7
Antigüedad: 18 años, 10 meses
Puntos: 0
Bueno, ahora estoy mas tranquilo. Pense estaba haciendo algo mal xq es la primera vez en mi uso de responseXML.

Graacias
  #13 (permalink)  
Antiguo 09/06/2006, 18:01
Avatar de NzO
NzO
 
Fecha de Ingreso: abril-2005
Mensajes: 153
Antigüedad: 19 años, 8 meses
Puntos: 3
#1 No lo entiendo sinceramente, tu has probado el archivo ASP y ves que te lo devuelve como un XML? Si es asi es imposible que responseXML no te vaya en IE.

#8 con esta estructura, no me extraña que tires muchos mas caracteres. Para esos datos puedes usar esta estructura facilmente:
Código:
<personas>
<usuario id="4">marcos</usuario>
<usuario id="5">luis</usuario>
</personas>
Eso sin contar con que luego te las tienes que ingeniar para recoger los datos son split y rollos. Ademas de que una estructura compleja como la de un feed no podrias hacerlo.
  #14 (permalink)  
Antiguo 12/06/2006, 17:40
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
loading.........


Si no puedes obtener un responseXML es porque tu XML está mal formado
probalo con alert(objeto.responseXML)
deberia soltarte un XML document.

Ese es el problema, he trabajado con responseXML y puedo decir que es lo mejor para transportar infinidad de datos al mismo tiempo, he probado con el método JSON pero... me quedo con XML


connection closed.
__________________

Maborak Technologies
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:59.