Javascript for..in и jQuery $ .for () не работают для XMLHttpRequest в IE - PullRequest
1 голос
/ 18 февраля 2010

ОБНОВЛЕНИЕ: проблема возникает только тогда, когда я использую более старую версию jQuery (1.3.2), а не самую новую версию (1.4.2).

ОРИГИНАЛЬНЫЙ ВОПРОС:

Я обнаружил странное поведение, и мне интересно, есть ли обходные пути. Цикл javascript for может быть использован для перечисления имен свойств объекта. Я нахожу, однако, что в IE он не работает для некоторых объектов, в частности, XMLHttpRequest. Рассмотрим следующий код. Это откроет окно предупреждения для каждого свойства в XMLHttpRequest на Firefox. Однако в IE свойства не найдены. Если я перейду к отладчику, у объекта определенно будут свойства. Если я использую функцию jQuery $ .for (), я вижу тот же результат.

<!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>

1 Ответ

2 голосов
/ 19 февраля 2010

В jQuery 1.3.2 методы ajax создают запрос XMLHttpRequest, используя следующий код:

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

Это означает, что в IE7 и IE8 вместо создания экземпляра собственного объекта XMLHttpRequest вместо него создается эквивалент ActiveX, Microsoft.XMLHTTP. Короткий ответ: свойства и методы элементов управления ActiveX не перечисляются, поэтому for...in ничего не обнаружит.

...