使用Javascript的for..in和jQuery的$。对于()不会在IE浏览器的XMLHttpRequest的工作

StackOverflow https://stackoverflow.com/questions/2291381

更新:只有当使用jQuery(1.3.2)的旧版本,会出现问题,而不是最新的版本(1.4.2)

原来的问题:

我发现一个奇怪的行为,如果有任何变通办法很纳闷。 “for”循环的JavaScript可以用于枚举的对象的属性名。我发现尽管这在IE上它并不适用于某些对象,特别是XMLHttpRequest的工作。考虑下面的代码。它会打开一个警告框上的Firefox了XMLHttpRequest每个属性。在IE但是,没有属性被发现。如果我使用调试器逐步完成,肯定有对象的属性。   如果我使用jQuery的$。对于()函数,我看到了同样的结果。

<!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>
有帮助吗?

解决方案

在jQuery的1.3.2,所述AJAX方法使用下面的代码创建了XMLHttpRequest:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top