Pregunta

ACTUALIZACIÓN: El problema sólo se produce cuando se utiliza una versión anterior de jQuery (1.3.2) y no en la nueva versión (1.4.2)

.

pregunta original:

He encontrado un comportamiento extraño, y me pregunto si hay algunas soluciones temporales. El javascript 'de' bucle se puede utilizar para enumerar los nombres de las propiedades de un objeto. Estoy encontrando sin embargo, que en IE no funciona para algunos objetos, particularmente un XMLHttpRequest. Considere el siguiente código. Se abrirá un cuadro de alerta para cada propiedad en el XMLHttpRequest en Firefox. En IE sin embargo, no hay propiedades se encuentran. Si me paso a través con el depurador, definitivamente hay propiedades en el objeto.   Si utilizo la función de jQuery $ .para (), veo el mismo resultado.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
      "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

    <script src="http://code.jquery.com/jquery-latest.js"></script>

    <script>
        $(document).ready(function() {

            $.ajax({
                url: "/willneverwork/",
                timeout: 1,
                error: function(xmlHttpRequest) {

                    for (key in xmlHttpRequest) {
                        alert(key);
                    }
                }
            });
        });
    </script>

</head>
<body>
</body>
</html>
¿Fue útil?

Solución

En jQuery 1.3.2, los métodos ajax crean el XMLHttpRequest usando el siguiente código:

return window.ActiveXObject 
           ? new ActiveXObject("Microsoft.XMLHTTP") 
           : new XMLHttpRequest();

Esto significa que en IE7 y IE8, en lugar del objeto XMLHttpRequest nativa siendo instanciado, el equivalente ActiveX, Microsoft.XMLHTTP, se crea una instancia en su lugar. La respuesta corta es que las propiedades y métodos de los controles ActiveX no pueden enumerarse, por lo tanto, for...in no va a descubrir nada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top