Frage

UPDATE: Das Problem tritt nur auf, wenn ich eine ältere Version von JQuery (1.3.2) und nicht auf der neuesten Version (1.4.2) verwende.

Originalfrage:

Ich habe ein seltsames Verhalten gefunden und frage mich, ob es irgendwelche Arbeiten gibt. Das JavaScript 'für' Schleife kann verwendet werden, um die Eigenschaftsnamen eines Objekts aufzuzählen. Ich stelle jedoch fest, dass es für einige Objekte nicht funktioniert, insbesondere für ein XMLHTTPrequest. Betrachten Sie den folgenden Code. Für jede Eigenschaft auf dem XMLHTTPrequest auf Firefox wird eine Alarmbox geöffnet. Auf IE werden jedoch keine Eigenschaften gefunden. Wenn ich mit dem Debugger einstehe, gibt es definitiv Eigenschaften für das Objekt. Wenn ich JQuery's $ .FOR () -Funktion verwende, sehe ich dasselbe Ergebnis.

<!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>
War es hilfreich?

Lösung

In JQuery 1.3.2 erstellen die AJAX -Methoden das XMLHTTPREQUEST mit dem folgenden Code:

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

Dies bedeutet, dass in IE7 und IE8 anstelle des sofortigen nativen XMLHTTPrequest -Objekts der ActiveX -Äquivalent Microsoft.xmlhttp stattdessen instanziiert wird. Die kurze Antwort lautet, dass Eigenschaften und Methoden von ActiveX -Kontrollen nicht aufzählbar sind, daher for...in werde nichts entdecken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top