【Ajax 2】封装Ajax的核心对象:XMLHttpRequest对象
导读:AJAX利用一个构建到所有现代浏览器内部的对象-XMLHttpRequest-来实现发送和接收HTTP请求与响应信息。那么,XMLHttpRequest对象是怎么创建和封装的呢?
一、简介
1.1,用途
该对象向服务器发送请求,并接收服务器响应,实现与服务器的异步通信
1.2,发展
在1999年上半年,微软利用ActiveX对象实现了XMLHTTP对象,随后,在2000年,Mozilla实现了相同接口的原生对象XMLHttpRequest对象,Opera,Safari也相继实现。
二、XMLHttpRequest的基本知识
2.1,属性
2.2,状态
2.3,status和statueText
2.4,方法
三、封装XMLHttpRequest对象
3.1,步骤
总结说来,对于XMLHttpRequest对象的封装,有五步:
1,创建一个XMLHttpRequest对象
2,调用对象的Open()方法设置和服务器端交互的基本信息
3,使用对象的onReadystatechange属性注册回调函数,在函数中判断交互是否结束,响应是否正确,并根据需要获取服务器返回的数据,更新页面内容
4,通过对象的setRequestHeader()方法设置相应的请求头(如果交互方式为:POST)
5,调用对象的send()方法发起请求
3.2,封装
<span style="font-family:KaiTi_GB2312;font-size:18px;">/*
封装XMLHTTPRequest对象
*/
var XMLHTTPRequest=function(userName) {
//1,创建XMLHTTPRequest对象
var myXMLHttpRequest;
if (window.XMLHttpRequest) {
//IE7,IE8,Firefox,Mozillar,Safari,Opera
myXMLHttpRequest = new XMLHttpRequest();
//服务器发送回来的头部,不是text/xml,进行忽略
if (myXMLHttpRequest.overrideMineType) {
myXMLHttpRequest.overrideMineType("text/xml");
}
}//IE5,IE6,IE5.5
else if (window.ActiveXObject) {
//创建一个数组,包含所有能用于创建XMLHTTPRequest对象的ActiveXobject控件名称
var activeName = ["XSXML2.XMLHTTP", "Microsoft.XMLHTTP", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.6.0"];
for (var i = 0; i < activeName.length; i++) {
//没有可用的控件,捕捉异常
try {
myXMLHttpRequest = new ActiveXObject(activeName[i]);
break;//创建成功,终止循环
} catch (e) { }
}
}
//对象创建失败
if (myXMLHttpRequest == undefined || myXMLHttpRequest == null) {
alert("当前浏览器不支持创建XMLHTTPRequest对象,请更换浏览器");
return;
}
/*
//GET方式交互
//2,设置和服务器端交互的相应参数,打开资源
myXMLHttpRequest.open("GET", "AJAX?name=" + userName, true);
//3,注册回调函数
myXMLHttpRequest.onreadystatechange = callback;
//4,设置向服务器端发送的数据,启动和服务器端的交互
myXMLHttpRequest.send(null);
*/ //POST方式交互
//2,设置和服务器端交互的相应参数,打开资源
myXMLHttpRequest.open("POST", "AJAX",true);
//3,注册回调函数
myXMLHttpRequest.onreadystatechange = callback;
//4,设置请求头(和GET方式的区别)
myXMLHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//4,设置向服务器端发送的数据,启动和服务器端的交互
myXMLHttpRequest.send("name="+userName); //3.1,实现回调函数
function callback() {
//判断和服务器端的交互是否完成,然后判断服务器端是否正确返回了数据
if (myXMLHttpRequest.readyState == 4) {//和服务器端的交互已经完成
if (myXMLHttpRequest.status == 200) {//服务器的响应代码为200,正确的返回了数据
//纯文本的接收方法,使用前提:服务器端设置content-type为text/xml
var message = myXMLHttpRequest.responseText;
//向div标签中填充文本内容
var div = document.getElementById("message");
div.innerHTML = message;
}
}
}
}
</span>
四、总结
Ajax还有很多需要探索和学习的,比如说例子的实现,我没有实现它,肯定是对于这个知识的掌握还不够,或者说别的关于BS的知识学习的还不够,不能放弃,遇到一个问题就是我的一次机会。还有包括Ajax的封装,还有其跨域问题、缓存问题等,都需要解决。
【Ajax 2】封装Ajax的核心对象:XMLHttpRequest对象的更多相关文章
- AJAX编程-封装ajax工具函数
即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用.本质是在HTTP协议的基础上以异步的方式与服务器 ...
- AJAX 核心 —— XMLHTTPRequest 对象回顾
一.AJAX概述 不使用 AJAX 的网页,如果要更新内容,需要重载整个页面. AJAX ( Asynchronous Javascript And XML ,异步 Javascript 和 XML) ...
- Ajax学习(三)——XMLHttpRequest对象的五步使使用方法
Ajax的核心技术是XMLHttpRequest对象,它能够在不向server提交整个页面的情况下.实现局部更新网页.通过这个对象,Ajax能够像桌面应用程序那样仅仅与server进行数据层的 ...
- 使用XMLHttpRequest对象完成原生的AJAX请求
1.大家眼中的Ajax 说到Ajax,只要有过前端开发经验的童鞋一定都不陌生,大都知道它就是一种与后端之间的通信技术,通过这个神奇的家伙,我们不用像传统表单那样填完信息一点提交就呼啦呼啦跳转了.Aja ...
- AJAX——XMLHttpRequest对象的使用
AJAX是web2.0即动态网页的基础,而XMLHttpRequest对象又是AJAX的核心.XMLHttpRequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据 一. ...
- AJAX——理解XMLHttpRequest对象
AJAX大家已经都知道了,XMLHttpRequest对象则是AJAX的核心.这篇博客重点总结一下这个对象的使用. XMLHttpRequest对象的属性和方法: 属性 说明 readyState 表 ...
- jquery与ajax的XMLHttpRequest对象介绍
首先 认识一个对象 这个对象叫XMLHttpRequest XMLHttpRequest对象可以提供在不刷新页面的情况下向服务器发送异步请求,并且接受服务器端返回的结果.从而实现局部更新当前页面的功 ...
- 用js内置对象XMLHttpRequest 来用ajax
步骤: /* 用XMLHTTPRequest来进行ajax异步数据交交互*/ 主要有几个步骤: //1.创建XMLHTTPRequest对象 //最复杂的一步 if (window.XMLHttpRe ...
- 【02】AJAX XMLHttpRequest对象
AJAX XMLHttpRequest对象 XMLHttpRequest 对象用于与服务器交换数据,能够在不重新加载整个网页(刷新)的情况下,对网页进行部分更新. XMLHttpRequest 对 ...
随机推荐
- Mysql数据类型简介(大概了解)
知道有整型,浮点型,定点数类型( DECIMAL(M,D)M是数据总长度,是小数位 ),日期类,字符串类,二进制类型(存图片路径,视频路径一般用BLOG就行了喔)……不会再去查 讲一下几个专有名词: ...
- Python实现决策树ID3算法
主要思想: 0.训练集格式:特征1,特征2,...特征n,类别 1.采用Python自带的数据结构字典递归的表示数据 2.ID3计算的信息增益是指类别的信息增益,因此每次都是计算类别的熵 3.ID3每 ...
- spark序列化及MapOutputTracker解析
本文主要打算对spark内部的序列化机制以及在shuffle map中起衔接作用的MapOutputTracker做一下剖析.主要涉及具体实现原理以及宏观设计的一些思路. 1,spark序列化 任何一 ...
- RabbitMQ十:重要方法简述(参数)
主要方法 前言 经过前面的学习,RabbitMQ 已经拙见有一定认识和了解,今天主要针对我们在前面学习方法进行一次小总结,本篇文章也想在开头写的,但是后来考虑,如果我都把方法都一一列举,我想大家都没很 ...
- Flutter 1.0 正式版: Google 的跨平台 UI 工具包
今天我们非常高兴的宣布,Flutter 的 1.0 版本正式发布!Flutter 是 Google 为您打造的 UI 工具包,帮助您通过一套代码同时在 iOS 和 Android 上构建媲美原生体验的 ...
- Android MVVM小结
一.概念 关于MVC.MVP与MVVM的概念就不介绍了,总之一句话,MVVM概念出现比MVP早,MVP比MVC早,作为程序员就应该去学习最新的技术不是?详细的概念介绍移步这里吧,https://www ...
- Android原生系统API自带dp、px、sp单位转换
Android系统中自带的Api中可以使用TypedValue进行单位转换 1,调用系统api转换单位 // 获得转换后的px值 float pxDimension = TypedValue.appl ...
- Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机
#此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...
- Delphi定时器控件TTimer“一睡不醒”问题研究
1,试验1—基础代码 1.1页面控件与代码 定时器 Timer1 Timer_work Interval 1000 1500 Enabled True True Ontimer事件 then exit ...
- QT 学习笔记概述
以下笔记为在看书和实践的过程中的部分记录总结: 0. 窗口布局 1) 支持绝对布局和布局管理器布局; 2) 绝对布局不够灵活.无法自动调整大小,需要手动编写代码调整: 3) 布局管理器管理布局比较灵活 ...