Domanda

UPDATE: Il problema si verifica solo quando si utilizza una vecchia versione di jQuery (1.3.2) e non sulla nuova versione (1.4.2)

.

domanda iniziale:

Ho trovato un comportamento strano, e mi chiedo se ci sono work-around. Il javascript 'per' loop può essere utilizzato per enumerare i nomi delle proprietà di un oggetto. Sto scoprendo però che su IE non funziona per alcuni oggetti, in particolare un XMLHttpRequest. Si consideri il seguente codice. Si aprirà una finestra di avviso per ogni proprietà sul XMLHttpRequest su Firefox. Sulla IE tuttavia, immobili si trovano. Se io passo attraverso con il debugger, ci sono sicuramente proprietà dell'oggetto.   Se uso la funzione di jQuery $ .per (), vedo lo stesso risultato.

<!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>
È stato utile?

Soluzione

In jQuery 1.3.2, i metodi ajax creano l'XMLHttpRequest utilizzando il seguente codice:

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

Ciò significa che in IE7 e IE8, invece dell'oggetto XMLHttpRequest nativo sia istanziata, l'equivalente ActiveX, Microsoft.XMLHTTP, viene istanziata invece. La risposta breve è che le proprietà ei metodi di controlli ActiveX non sono enumerabili, quindi for...in non scoprirai nulla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top