1

更新:仅当我使用旧版本的 jQuery (1.3.2) 而不是最新版本 (1.4.2) 时才会出现问题。

原始问题:

我发现了一个奇怪的行为,想知道是否有任何解决方法。javascript 'for' 循环可用于枚举对象的属性名称。我发现虽然在 IE 上它不适用于某些对象,尤其是 XMLHttpRequest。考虑以下代码。它将为 Firefox 上的 XMLHttpRequest 上的每个属性打开一个警告框。然而,在 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>
4

1 回答 1

2

在 jQuery 1.3.2 中,ajax 方法使用以下代码创建 XMLHttpRequest:

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

这意味着在 IE7 和 IE8 中,不是实例化本机 XMLHttpRequest 对象,而是实例化 ActiveX 等效对象 Microsoft.XMLHTTP。简短的回答是 ActiveX 控件的属性和方法是不可枚举的,因此for...in不会发现任何东西。

于 2010-02-19T00:07:08.993 回答