Question

MISE À JOUR: Le problème se produit uniquement lorsque j'utilise une ancienne version de jQuery (1.3.2) et non sur la dernière version (1.4.2)

.

QUESTION ORIGINAL:

Je l'ai trouvé un comportement bizarre, et je me demande s'il y a des contournements. Le javascript « pour » la boucle peut être utilisée pour énumérer les noms de propriétés d'un objet. Je trouve cependant que sur IE, il ne fonctionne pas pour certains objets, en particulier un XMLHttpRequest. Considérez le code suivant. Il ouvrira une boîte d'alerte pour chaque propriété sur le XMLHttpRequest sur Firefox. Sur IE cependant, aucune propriété ne trouve. Si je fais un pas dans le débogueur, il y a certainement des propriétés de l'objet.   Si j'utilise la fonction de jQuery .pour $ (), je vois le même résultat.

<!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>
Était-ce utile?

La solution

Dans jQuery 1.3.2, les méthodes ajax créer le XMLHttpRequest en utilisant le code suivant:

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

Cela signifie que dans IE7 et IE8, au lieu de l'objet natif XMLHttpRequest étant instanciée, l'équivalent ActiveX, Microsoft.XMLHTTP, est instancié à la place. La réponse courte est que les propriétés et les méthodes de contrôles ActiveX ne sont pas dénombrable, donc for...in ne découvrirez rien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top