切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
Ajax
XMLHttpRequest Level 2 使用指南——ajax实现http(s)协议的原理
XMLHttpRequest Level 2 使用指南——ajax实现http(s)协议的原理
2020-06-07
Ajax
前端之家
前端之家
收集整理的这篇文章主要介绍了
XMLHttpRequest Level 2 使用指南——ajax实现http(s)协议的原理
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。
最早,微软在IE 5引进了这个接口。因为它太有用,其他浏览器也模仿部署了,ajax操作因此得以诞生。但是,这个接口一直没有标准化,每家浏览器的实现或多或少有点不同。HTML 5的概念形成后,W3C开始考虑标准化这个接口。2008年2月,就提出了XMLHttpRequest Level 2 草案。 这个XMLHttpRequest的新版本,提出了很多有用的新
功能
,将大大推动互联网革新。本文就对这个新版本进行详细介绍。 一、老版本的XMLHttpRequest对象 在介绍新版本之前,我们先回顾一下老版本的
用法
。 首先,新建一个XMLHttpRequest的实例。 var xhr = new XMLHttpRequest(); 然后,向远程主机发出一个HTTP请求。 xhr.open('GET','example.
PHP
'); xhr.send(); 接着,就等待远程主机做出回应。这时需要监控XMLHttpRequest对象的状态变化,指定回调
函数
。 xhr.onreadystatechange = function(){ if ( xhr.readyState == 4 && xhr.status == 200 ) { alert( xhr.responseText ); } else { alert( xhr.statusText ); } }; 上面的
代码
包含了老版本XMLHttpRequest对象的主要
属性
: * xhr.readyState:XMLHttpRequest对象的状态,等于4表示数据已经接收完毕。 * xhr.status:服务器返回的状态码,等于200表示一切正常。 * xhr.responseText:服务器返回的文本数据 * xhr.responseXML:服务器返回的XML格式的数据 * xhr.statusText:服务器返回的状态文本。 二、老版本的缺点 老版本的XMLHttpRequest对象有以下几个缺点: * 只
支持
文本数据的传送,无法用来读取和
上传
二进制
文件
。 * 传送和接收数据时,没有进度信息,只能
提示
有没有完成。 * 受到"同域限制"(Same Origin Policy),只能向同一域名的服务器请求数据。 三、新版本的
功能
新版本的XMLHttpRequest对象,针对老版本的缺点,做出了大幅改进。 * 可以设置HTTP请求的时限。 * 可以使用FormData对象管理表单数据。 * 可以
上传
文件
。 * 可以请求不同域名下的数据(跨域请求)。 * 可以
获取
服务器端的二进制数据。 * 可以获得数据传输的进度信息。 下面,我就一一介绍这些新
功能
。 四、HTTP请求的时限 有时,ajax操作很耗时,而且无法预知要花多少时间。如果网速很慢,
用户
可能要等很久。 新版本的XMLHttpRequest对象,
增加
了timeout
属性
,可以设置HTTP请求的时限。 xhr.timeout = 3000; 上面的语句,将最长等待时间设为3000毫秒。过了这个时限,就
自动
停止HTTP请求。与之配套的还有一个timeout事件,用来指定回调
函数
。 xhr.ontimeout = function(event){ alert('请求超时!'); } 目前,Opera、Firefox和IE 10
支持
该
属性
,IE 8和IE 9的这个
属性
属于XDomainRequest对象,而Chrome和Safari还
不支持
。 五、FormData对象 ajax操作往往用来传递表单数据。为了方便表单处理,HTML 5新增了一个FormData对象,可以模拟表单。 首先,新建一个FormData对象。 var formData = new FormData(); 然后,为它
添加
表单项。 formData.append('username','张三'); formData.append('id',123456); 最后,直接传送这个FormData对象。这与提交网页表单的
效果
,完全一样。 xhr.send(formData); FormData对象也可以用来
获取
网页表单的值。 var form = document.getElementById('myform'); var formData = new FormData(form); formData.append('secret','123456'); //
添加
一个表单项 xhr.open('POST',form.action); xhr.send(formData); 六、
上传
文件
新版XMLHttpRequest对象,不仅可以发送文本信息,还可以
上传
文件
。 假定files是一个"选择
文件
"的表单元素(input[type="file"]),我们将它装入FormData对象。 var formData = new FormData(); for (var i = 0; i < files.length;i++) { formData.append('files[]',files[i]); } 然后,发送这个FormData对象。 xhr.send(formData); 七、跨域资源共享(CORS) 新版本的XMLHttpRequest对象,可以向不同域名的服务器发出HTTP请求。这叫做"跨域资源共享"(Cross-origin resource sharing,简称CORS)。 使用"跨域资源共享"的前提,是浏览器必须
支持
这个
功能
,而且服务器端必须同意这种"跨域"。如果能够满足上面的条件,则
代码
的写法与不跨域的请求完全一样。 xhr.open('GET','http://other.server/and/path/to/script'); 目前,除了IE 8和IE 9,主流浏览器都
支持
CORS,IE 10也将
支持
这个
功能
。服务器端的设置,请参考《Server-Side Access Control》。 八、接收二进制数据(
方法
A:改写MIMEType) 老版本的XMLHttpRequest对象,只能从服务器取回文本数据(否则它的名字就不用XML起首了),新版则可以取回二进制数据。 这里又分成两种做法。较老的做法是改写数据的MIMEType,将服务器返回的二进制数据伪装成文本数据,并且告诉浏览器这是
用户
自定义
的字符集。 xhr.overrideMimeType("text/plain; charset=x-user-defined"); 然后,用responseText
属性
接收服务器返回的二进制数据。 var binStr = xhr.responseText; 由于这时,浏览器把它当做文本数据,所以还必须再一个个字节地还原成二进制数据。 for (var i = 0,len = binStr.length; i < len; ++i) { var c = binStr.charCodeAt(i); var byte = c & 0xff; } 最后一行的位运算"c & 0xff",表示在每个字符的两个字节之中,只保留后一个字节,将前一个字节扔掉。原因是浏览器解读字符的时候,会把字符
自动
解读成Unicode的0xF700-0xF7ff区段。 八、接收二进制数据(
方法
B:responseType
属性
) 从服务器取回二进制数据,较新的
方法
是使用新增的responseType
属性
。如果服务器返回文本数据,这个
属性
的值是"TEXT",这是默认值。较新的浏览器还
支持
其他值,也就是说,可以接收其他格式的数据。 你可以把responseType设为blob,表示服务器传回的是二进制对象。 var xhr = new XMLHttpRequest(); xhr.open('GET','/path/to/image.png'); xhr.responseType = 'blob'; 接收数据的时候,用浏览器
自带
的Blob对象即可。 var blob = new Blob([xhr.response],{type: 'image/png'}); 注意,是读取xhr.response,而不是xhr.responseText。 你还可以将responseType设为arraybuffer,把二进制数据装在一个数组里。 var xhr = new XMLHttpRequest(); xhr.open('GET','/path/to/image.png'); xhr.responseType = "arraybuffer"; 接收数据的时候,需要遍历这个数组。 var arrayBuffer = xhr.response; if (arrayBuffer) { var byteArray = new Uint8Array(arrayBuffer); for (var i = 0; i < byteArray.byteLength; i++) { // do something } } 更详细的讨论,请看Sending and Receiving Binary Data。 九、进度信息 新版本的XMLHttpRequest对象,传送数据的时候,有一个progress事件,用来返回进度信息。 它分成
上传
和下载两种情况。下载的progress事件属于XMLHttpRequest对象,
上传
的progress事件属于XMLHttpRequest.upload对象。 我们先定义progress事件的回调
函数
。 xhr.onprogress = updateProgress; xhr.upload.onprogress = updateProgress; 然后,在回调
函数
里面,使用这个事件的一些
属性
。 function updateProgress(event) { if (event.lengthComputable) { var percentComplete = event.loaded / event.total; } } 上面的
代码
中,event.total是需要传输的总字节,event.loaded是已经传输的字节。如果event.lengthComputable不为真,则event.total等于0。 与progress事件相关的,还有其他五个事件,可以分别指定回调
函数
: * load事件:传输成功完成。 * abort事件:传输被
用户
取消。 * error事件:传输中出现
错误
。 * loadstart事件:传输开始。 * loadEnd事件:传输结束,但是不知道成功还是失败。
上一篇:Ajax中向Servlet发送请求时中文乱码
下一篇:ajax 同步和异步的区别|已迁移
猜你在找的Ajax相关文章
网页的异步请求(Ajax)
JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表...
作者:前端之家 时间:2021-01-14
手动实现AJAX
AJAX 每日更新前端基础,如果觉得不错,点个star吧 😃 https://github.com/Win...
作者:前端之家 时间:2020-12-19
axios异步提交表单数据的不同形式
踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使...
作者:前端之家 时间:2020-12-12
php的ajax简单实例
很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈...
作者:前端之家 时间:2020-11-11
Json与Ajax(注册实例)
需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: "./serv...
作者:前端之家 时间:2020-11-07
jSon和Ajax登录功能,ajax数据交互案例
ajax实例,检测用户与注册 检测用户名是否被占用: 在用户填写完用户名之后,ajax会异步向...
作者:前端之家 时间:2020-11-07
关于AjaxControlToolkit的样式问题
网(LieHuo.Net)教程 技术文章一直都是转载的,从来没有自创过.终于遇到AjaxControlToolkit,...
作者:前端之家 时间:2020-11-04
一个简单的AJAX实现(HELLO AJAX)
客户端部分: <html> <head> <meta http-equiv="Content-Type" ...
作者:前端之家 时间:2020-11-04
AJAX中文乱码的两类问题及解决之策
1)发送路径中的参数有中文,在服务器段接收参数值是乱码 例如: var url=”a.jsp?na...
作者:前端之家 时间:2020-11-04
实例:AJAX返回xml代码如何在网页中显示
建站学院(LieHuo.Net)文档 今天来学习一篇实例代码教程:AJAX返回xml代码如何在网页中显...
作者:前端之家 时间:2020-11-04
编程分类
HTML
HTML5
JavaScript
CSS
jQuery
Bootstrap
Angularjs
TypeScript
Vue
Dojo
Json
Electron
Node.js
extjs
Express
XML
ES6
Ajax
Flash
Unity
React
Flex
Ant Design
Web前端
微信小程序
微信公众号
最新文章
• 网页的异步请求(Ajax)
• 手动实现AJAX
• axios异步提交表单数据的不
• php的ajax简单实例
• Json与Ajax(注册实例)
• Ajax基础原理与应用
• jSon和Ajax登录功能,ajax
• 关于AjaxControlToolkit的
• 一个简单的AJAX实现(HELLO
• AJAX中文乱码的两类问题及
热门标签
更多 ►
关闭广告
单独headers
封装代码
提示错误
整数正则
非0开头
跳页
出页码
antd table
提示URL未注册
公众号支付
vue hash模式
iSlider
车牌键盘
循环图片
echarts 双折
左右布局
DllPlugin
对象创建
打字游戏
圈选
两栏
云函数
蒙版
ES2020
橱窗
无缝滚动轮播
色块碰撞
组件销毁
文档操作