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

面试题 相关文章推荐
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
Sep 08 面试题
什么是serialVersionUID
Mar 04 面试题
关于递归的一道.NET面试题
May 12 面试题
什么是托管函数?托管函数有什么用?
Jun 15 面试题
盛大二次面试题
Nov 18 面试题
初级软件工程师面试题 Junior Software Engineer Interview
Feb 15 面试题
中科创达面试题
Dec 28 面试题
瀑布模型都有哪些优缺点
Jun 23 面试题
Ajax和javascript的区别
Jul 20 面试题
如何用Java实现列出某个目录下的所有子目录
Jul 20 面试题
J2EE包括哪些技术
Nov 25 面试题
为什么说Ruby是一种真正的面向对象程序设计语言
Oct 30 面试题
什么是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
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
2014/01/02 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
jquery.validate使用详解
2016/06/02 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
深入浅析Python字符编码
2015/11/12 Python
python ansible服务及剧本编写
2017/12/29 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
浅谈Python 函数式编程
2020/06/20 Python
Python解析微信dat文件的方法
2020/11/30 Python
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
StubHub中国:购买和出售全球活动门票
2020/01/01 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
机械工程师的岗位职责
2013/11/17 职场文书
超市开店计划书
2014/04/26 职场文书
医德医风个人总结
2015/02/28 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
mysql 获取时间方式
2022/03/20 MySQL
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python