我在使用 AJAX 时遇到了一个特别棘手的问题,它在 IE7 和 Firefox 中工作正常,但在 IE6 中却不行。
我有一个非常简单的自制 AJAX 框架,它要求我通过添加几个属性来扩展 XMLHttpRequest 对象(或者在 IE 中为 XMLHttpRequest ActiveXObject)。相关部分代码如下:
//the following is the constructor for our ajax request object - which extends the standard object. It is used in the method below it
function FD_XMLHttpRequest() {
var xmlHttpReq = false;
if (window.XMLHttpRequest) { // Mozilla/Safari
xmlHttpReq = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
}
//we now have the request object - extend it with things we might need to store with it
xmlHttpReq.onReturnFunc = null; //******ERROR IN IE6******
xmlHttpReq.targetDivId = null; //******ERROR IN IE6******
return xmlHttpReq;
}
//To use:
myXHReq = new FD_XMLHttpRequest();
myXHReq.onReturnFunc = someFunction;
myXHReq.targetDivId = "myDiv";
问题似乎是 FF 和 IE7 允许以这种方式扩展对象,但 IE6 不允许(它提示“对象不支持此属性或方法”)。我尝试过使用“prototype”属性和各种“真实”继承方法,但我不太明白 IE6 到底发生了什么
最佳答案
在 IE7 上,您将获得一个“原生 JavaScript”XMLHttpRequest 对象。与所有 JavaScript 对象一样,您可以毫无问题地向它们添加任意属性 — 尽管这并不总是一个好主意,因为如果 future 的浏览器添加了自己的真正的“onReturnFunc”成员,您就会混淆它。
在 IE6 或 IE7 上,当禁用“ native XMLHttpRequest”选项时,您将转而使用原始的 ActiveX XMLHttpRequest。但是,ActiveX 对象的行为与 JavaScript 对象有很大不同,其中区别之一是您不能添加任意属性。
一般来说,您应该有自己的包装类来保存您需要的任何额外数据,并保存对“真实”XMLHttpRequest 对象的引用。
关于javascript - 如何在 IE6 中向对象添加属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594428/