ajax整理
来源:互联网 发布:无线路由器破解软件 编辑:程序博客网 时间:2024/06/05 08:24
AJAX 梳理与封装
简介
AJAX 是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换,使网页实现异步更新。可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
1. 创建 XMLHttpRequest 对象
Ajax的核心是XMLHttpRequest对象,它是Ajax实现的关键,发送异步请求、接受响应以及执行回调都是通过它来完成,现代浏览器都支持 XMLHttpRequest ,IE浏览器的IE6或以下的版本中需要使用 ActiveXObject 对象
XMLHttpRequest 分为 Level1 和 Level2 两个版本,最新版本的 level2 支持发送跨域请求(需服务器允许)、获取进度信息、设置超时时间、发送接收二进制数据等
创建 XMLHttpRequest对象 兼容性写法
var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) { try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) { alert('浏览器不支持 Ajax!'); } } }
2. XMLHttpRequest 对象的属性和方法
1. readyState
ajax 调用过程中的的状态, 只读,不可更改
- 0: 请求已建立,但未初始化
- 1: 请求已建立,但未发送(已调用open(),但未调用send())
- 2: 请求已发送,(send()已调用,接收到响应头)
- 3: 请求处理中
- 4: 数据接收完毕
2. onreadystatechange
readyState 状态改变时触发,用于绑定时间回调
3. status
表示http请求的状态, 初始值为0, 只读,不可更改
4. onloadstart
请求发送前调用 也就是 readyState = 2 之前
5. onprogress
获取资源的下载进度,readyState = 3 时触发, IE10 +
6. onload
请求成功后触发,readyState = 4 后触发
7. onloadend
请求结束后触发 未收到响应也会触发
8. timeout
指定超时时长
9. ontimeout
请求超时时触发
10. abort()
用于取消 ajax 请求, readyState 会被设置为 0
11. onerror
ajax 请求出错后执行
12. upload
用于上传资源
xhr.upload.onprogress 可以查看文件上传进度
3. 基础使用
// 创建请求对象 var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) { try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) { alert('浏览器不支持 Ajax!'); } } } // 建立与服务器的连接 xhr.open( 'GET', //指定请求提交的方法, 'http://test/XXX', //请求的目标 true //请求的模式,是否是异步 ); // 发送请求 xhr.send(); // 接受服务器响应 xhr.onreadyStateChange = function () { if(xhr.readyState == 4 && xhr.status == 200){ console.log( xhr.responseText/ // 返回的数据 xhr.responseXML/ //返回的数据可以是json也可以是xml xhr.getAllReaponseHeaders()/ // 获取所有安全的ajax响应头 xhr.getReaponseHeaders("Content-Type")/ // 获取某一个响应头 xhr.status/ // 请求状态码 ) } }
4. 文件上传
<!-- 创建formData,放入待传文件 --> <input type="file" id="myfile">
function upload () { //准备表单 var fd = new FormData(); //第一个参数表单项的名称,第二个参数文件对象 fd.append('myfile', document.getElementById('myfile').files[0]); var xhr = new XMLHttpRequest(); // xhr.progress 下载进度事件 xhr.upload.progress 上传进度事件 xhr.upload.onprogress = function (e) { //上传进度监听事件 if(e.lengthComputable){ //判断当前文件长度是否可计算 var percent = Math.round(e.loaded * 100 / e.total); //当前下载长度百分比 console.log(percent + '%'); } } }
5. 完整封装
ajax({ method: 'GET', url: '../_data/a.json', success(resp) { } }) function ajax(opt) { opt = opt || {}; opt.method = opt.method.toUpperCase() || 'POST'; opt.url = opt.url || ''; opt.async = opt.async || true; opt.data = opt.data || null; opt.data = opt.data || null; opt.data = opt.data || null; opt.success = opt.success || function() {}; let xmlHttp = null; if(window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("您的浏览器暂不支持Ajax!"); } } } let params = []; for (var key in opt.data) { params.push(key + '=' + opt.data[key]); } let postData = params.join('&'); if (opt.method.toUpperCase() === 'POST') { xmlHttp.open(opt.method, opt.url, opt.async); xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); xmlHttp.send(postData); } else if (opt.method.toUpperCase() === 'GET') { xmlHttp.open(opt.method, opt.url + '?' + postData, opt.async); xmlHttp.send(null); } xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { opt.success(xmlHttp.responseText); } }; }
6. 参考资料
- Ajax总结篇
- 重拾Ajax
- Ajax 知识体系大梳理
阅读全文
0 0
- 整理ajax
- ajax整理
- ajax整理
- Ajax 常用api整理
- Ajax 常用api整理
- Ajax乱码问题整理
- Ajax乱码问题整理
- Ajax Modules 个人整理
- Ajax Modules 个人整理
- Ajax乱码问题整理
- AJAX笔记整理
- 各种Ajax整理
- Ajax常见问题整理
- 整理ajax笔记
- Ajax乱码问题整理
- JQuery+Ajax 整理
- Ajax 基础整理
- AJAX跨域整理
- Region实战SVG地图点击
- 《中华人民共和国网络安全法》今起正式实施
- sigemptyset、sigaddset、sigprocmask的用法
- css问题汇集
- Android Studio 百度地图 230错误 Scode码校验失败
- ajax整理
- Thinkphp文件锁处理高并发
- 51nod 1799 二分答案 (打表)
- Linux基础-9(crond)
- Kotlin 标准库扩展函数
- 决策树算法总结
- 元字符与转义(正则基本知识abc)
- 消息邮箱和消息队列
- 软件工程工作必备