使用Javascript的for..in和jQuery的$。对于()不会在IE浏览器的XMLHttpRequest的工作
-
21-09-2019 - |
题
更新:只有当使用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
不会发现任何东西。
不隶属于 StackOverflow