3

这部分是对解决方法的请求,部分是为了让人们知道 Internet Explorer 的原型实现仍然存在错误。

以下代码在 Internet Explorer 上不起作用。

XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open;
var x = new XMLHttpRequest();
x.old("POST", "test", false);

对于 IE 8 测试版和所有以前的版本,XMLHttpRequest.prototype 属性从一开始就不存在。在 IE8 中,它确实存在,但您会收到“无效的过程调用或参数”错误。Internet Explorer 不喜欢装饰。

有谁知道这个的解决方法?

更新

有人指出,我可以用新的函数和构造函数覆盖整个 XMLHttpRequest,然后创建一个包装脚本 ala XMLHttpRequest.js。原型方法要短得多,所以我还是更喜欢将它用于非 IE 浏览器。

4

1 回答 1

2

The problem seems to be that IE 8 recognizes XMLHttpRequest, but not as a function. Active X objects still seem to work. Instead of testing for the existance of window.XMLHtppRequest, I test for the typeof window.XMLHtppRequest. seems to work OK.

I recoded my get request as follows:

FG.ajax.getxhr = function(){
var xhr;
if (typeof window.XMLHttpRequest === 'function') {
    xhr  = XMLHttpRequest();
}
else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; 
于 2012-05-23T20:25:24.477 回答