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

面试题 相关文章推荐
怎样从/向数据文件读/写结构
Nov 23 面试题
Oracle快照(snapshot)
Mar 13 面试题
杭州-飞时达软件有限公司.net笔面试
Apr 28 面试题
新大陆软件面试题
Nov 24 面试题
网络安全类面试题
Aug 01 面试题
抽象类和接口的区别
Sep 19 面试题
C#面试题问题集
Apr 02 面试题
MySQL面试题目集锦
Apr 14 面试题
日期和时间问题
Jan 04 面试题
关于Java finally的面试题
Apr 27 面试题
什么是抽象
Dec 13 面试题
Java如何支持I18N?
Oct 31 面试题
什么是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
239军机修复记
2021/03/02 无线电
解析MySql与Java的时间类型
2013/06/22 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
Vue3项目打包后部署到服务器 请求不到后台接口解决方法
2020/02/06 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
python从入门到精通(DAY 3)
2015/12/20 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
查看Django和flask版本的方法
2018/05/14 Python
Python返回数组/List长度的实例
2018/06/23 Python
python实现京东秒杀功能
2018/07/30 Python
python遍历文件夹找出文件夹后缀为py的文件方法
2018/10/21 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
2014年小学数学教师工作总结
2014/12/03 职场文书
医德医风自我评价2015
2015/03/03 职场文书
任长霞观后感
2015/06/16 职场文书