不同浏览器创建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...

面试题 相关文章推荐
C语言开发工程师测试题
Dec 20 面试题
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
May 01 面试题
用友笔试题目
Oct 25 面试题
杭州联环马网络笔试题面试题
Aug 04 面试题
.NET初级开发工程师面试题
Apr 18 面试题
动态密码技术
Oct 18 面试题
C#笔试题
Jul 14 面试题
常用UNIX 命令(Linux的常用命令)
Jul 10 面试题
Python里面如何实现tuple和list的转换
Jun 13 面试题
内部类的定义、种类以及优点
Oct 16 面试题
解释下面关于J2EE的名词
Nov 15 面试题
Java面试题冲刺第十五天--设计模式
Aug 07 面试题
什么是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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
Linux基于php-fpm模式的lamp搭建phpmyadmin的方法
2018/10/25 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
js DOM的学习笔记
2011/12/22 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
JS实现向表格行添加新单元格的方法
2015/03/30 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
vue中各种通信传值方式总结
2019/02/14 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
Python双向循环链表实现方法分析
2018/07/30 Python
Python使用gRPC传输协议教程
2018/10/16 Python
Python内存管理实例分析
2019/07/10 Python
python3 enum模块的应用实例详解
2019/08/12 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
金士达面试非笔试
2012/03/14 面试题
职业教育毕业生求职信
2013/11/09 职场文书
初中政治教学反思
2014/01/17 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
大学生创业计划书怎么写
2014/09/15 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android