不同浏览器创建XMLHttpRequest方法有什么不同


Posted in 面试题 onNovember 17, 2014
XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。
对于Internet Explorer浏览器:
xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP.3.0″); //3.0或4.0, 5.0
xmlhttp_request = new ActiveXObject(“Msxml2.XMLHTTP”);
xmlhttp_request = new ActiveXObject(“Microsoft.XMLHTTP”);
由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的Internet Explorer浏览器,因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。
对于Mozilla﹑Netscape﹑Safari等浏览器
创建XMLHttpRequest 方法如下:xmlhttp_request = new XMLHttpRequest();
如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。 为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。
xmlhttp_request = new XMLHttpRequest();
xmlhttp_request.overrideMimeType(‘text/xml’);
在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式:
try{
if( window.ActiveXObject ){
for( var i = 5; i; i– ){
try{
if( i == 2 ){
xmlhttp_request = new ActiveXObject( “Microsoft.XMLHTTP” ); }
else{
xmlhttp_request = new ActiveXObject( “Msxml2.XMLHTTP.” + i + “.0″ );
xmlhttp_request.setRequestHeader(“Content-Type”,”text/xml”);
xmlhttp_request.setRequestHeader(“Charset”,”gb2312″); }
break;}
catch(e){
xmlhttp_request = false; } } }
else if( window.XMLHttpRequest )
{ xmlhttp_request = new XMLHttpRequest();
if (xmlhttp_request.overrideMimeType)
{ xmlhttp_request.overrideMimeType(‘text/xml’); } } }
catch(e){ xmlhttp_request = false; }
发送请求了
可以调用HTTP请求类的open()和send()方法,如下所示:
xmlhttp_request.open(‘GET’, URL, true);
xmlhttp_request.send(null);
open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。
第二个参数是请求页面的URL。
第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是”AJAX”中的”A”。
服务器的响应
这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:
xmlhttp_request.onreadystatechange =FunctionName;
FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如:
xmlhttp_request.onreadystatechange = function(){
// JavaScript代码段
};
首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。
readyState的取值如下:
0 (未初始化)
1 (正在装载)
2 (装载完毕)
3 (交互中)
4 (完成)
所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下:
if (http_request.readyState == 4) { // 收到完整的服务器响应 }
else { // 没有收到完整的服务器响应 }
当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。
处理从服务器得到的数据
有两种方式可以得到这些数据:
(1) 以文本字符串的方式返回服务器的响应
(2) 以XMLDocument对象方式返回响应

Tags in this post...

面试题 相关文章推荐
如何让Java程序执行效率更高
Jun 25 面试题
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
Feb 22 面试题
DBA的职责都有哪些
May 16 面试题
Oracle里面常用的数据字典有哪些
Feb 14 面试题
铭万公司.net面试题笔试题
Jul 20 面试题
shallow copy和deep copy的区别
May 09 面试题
什么是托管函数?托管函数有什么用?
Jun 15 面试题
简单说下OSPF的操作过程
Aug 13 面试题
linux面试题参考答案(5)
Nov 05 面试题
中间件分为哪几类
Mar 14 面试题
一份软件工程师的面试试题
Feb 01 面试题
EntityManager都有哪些方法
Nov 01 面试题
什么是Remote Module
Jun 10 #面试题
AJAX的全称是什么
Nov 06 #面试题
Prototype是怎么扩展DOM的
Oct 01 #面试题
GWT都有什么特性
Dec 02 #面试题
JavaScript获取当前url根目录(路径)
Feb 19 #面试题
ajax是什么及其工作原理
Feb 08 #面试题
Ajxa常见问题都有哪些
Mar 26 #面试题
You might like
文件上传类
2006/10/09 PHP
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
微信红包随机生成算法php版
2016/07/21 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
Javascript select下拉框操作常用方法
2009/11/09 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
Python的时间模块datetime详解
2017/04/17 Python
Python内置模块turtle绘图详解
2017/12/09 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
百联网上商城:i百联
2017/01/28 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
C#基础面试题
2016/10/17 面试题
优良学风班总结材料
2014/02/08 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
新学期感想
2015/08/10 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书