日期:2014-05-16  浏览次数:20647 次

关于XMLHttpRequest的疑问!!! - Web 开发 / Ajax
关于浏览器的不同 获得 XMLHttpRequest时 要做一些判断

其中 if(window.XMLHttpRequest){  
  XmlHttp = new XMLHttpRequest(); 如果if成立 则新创建一个实例。。
  }
  .......
  ......
  ......
 window.XMLHttpRequest 中的 XMLHttpRequest 和 new XMLHttpRequest()中的 XMLHttpRequest 含义应该不一样吧。

我感觉 第一个XMLHttpRequest 应该 表示一个对象实例 的引用 (相当于Java中 引用了对象的变量) 
  第二个XMLHttpRequest 应该 表示一个对象 ( 相当于Java中的 类)
 
那么就是说 windows.XMLHttpRequest 中的XMLHttpRequest 是 通过 XMLHttpRequest = new XMLHttpRequest()来的吧!

既然windows.XMLHttpRequest 已经 引用了 一个 XMLHttpRequest 对象实例 

那么 if(window.XMLHttpRequest){  
  XmlHttp = window.XMLHttpRequest;  
  }

这么做也是可以的吧 。  

 上面都是 自己的 想法 不知道 window.XMLHttpRequest 具体的 含义是什么  
请教 !!! 自己的JavaScript 功底 太烂了 



------解决方案--------------------
因为JS中任何对象都有本身存在的范围

window.XMLHttpRequest 说明XMLHttpRequest 是存在于window的域中
至于直接new XMLHttpRequest 是因为window这个全局域是可以不写的 一个变量在当前域中不存在 则环境默认会在WINDOW域中查找该变量

所以没有局部的XMLHttpRequest的变量的情况下 window.XMLHttpRequest ==XMLHttpRequest 

至于 XmlHttp = window.XMLHttpRequest 和 XmlHttp = new XMLHttpRequest()则完全不是一个概念
这个你可以看下new操作符的语法是什么意思

------解决方案--------------------
用firebug看看这两个区别不行么
------解决方案--------------------
IE把XMLHTTPREQUEST当成activeX
------解决方案--------------------
IE吧XMLHttpRequest看做是个ActiceX对象,而其他浏览器(如Firefox)把它看做一个本地的javascript对象,从而使用本地javascript或使用ActiceX来创建XMLHttpRequest实例,也就是当IE支持ActiceX就用ActiceX创建,不然就用本地javascript来创建
------解决方案--------------------
探讨
IE吧XMLHttpRequest看做是个ActiceX对象,而其他浏览器(如Firefox)把它看做一个本地的javascript对象,从而使用本地javascript或使用ActiceX来创建XMLHttpRequest实例,也就是当IE支持ActiceX就用ActiceX创建,不然就用本地javascript来创建