不同浏览器创建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面试题及答案
Sep 08 面试题
编写strcpy函数
Jun 24 面试题
当我正在为表建立索引的时候,SQL Server 会禁止对表的访问吗
Apr 28 面试题
一组SQL面试题
Feb 15 面试题
一道写SQL的面试题和答案
Nov 19 面试题
OLEDBConnection和SQLConnection有什么区别
May 31 面试题
什么是WEB控件?使用WEB控件有哪些优势?
Jan 21 面试题
linux面试题参考答案(5)
Sep 01 面试题
什么是SCM(软件配置管理)
Aug 16 面试题
Ajxa常见问题都有哪些
Mar 26 面试题
如何清空Session
Feb 23 面试题
Hibernate持久层技术
Dec 16 面试题
什么是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 分页原理分析,大家可以看看
2009/12/21 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
2019/08/12 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
python 公共方法汇总解析
2019/09/16 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
pygame实现非图片按钮效果
2019/10/29 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
python绘制分布折线图的示例
2020/09/24 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
css 元素选择器的简单实例
2016/05/23 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
.net开发工程师面试题
2014/02/25 面试题
DOM和JQuery对象有什么区别
2016/11/11 面试题
信息专业本科生个人的自我评价
2013/10/28 职场文书
临床医学系毕业生推荐信
2013/11/09 职场文书
扬州个园导游词
2015/02/06 职场文书
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL