1

更新: この問題は、最新バージョン (1.4.2) ではなく、古いバージョンの jQuery (1.3.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 に答える