Ajax与XMLHttpRequest随笔
1.XMLHttpRequest对象
- 创建XHR对象:let xhr = new XMLHttpRequest();
- open():启动一个请求准备发送
open()接收3个参数:请求类型('GET'、'POST')、请求的URL、是否异步发送请求(true or false)。
send():
发送请求
send()
接受一个参数:作为请求主体要发送的数据,如果不需要发送数据,传入一个null, 以防止出现未知错误。setRequestHeader():
设置自定义的请求头部信息
setRequestHeader()
接收两个参数:头部字段的名称和头部字段的值;调用此方法必须要在调用open()
方法之后,send()
之前。getResponseHeader():
获取响应信息中的某个指定头部信息
getAllResponseHeaders():
获取响应信息的所有头部信息
getResponseHeader()
接收一个参数:需要知道的头部信息的名称;但W3C标准对这两个方法有限制,它们不能获取如Set-Cookie
、Set-Cookie2
等的头部信息;所以getAllResponseHeaders()
只能拿到限制以外(即被视为safe
)的头部信息,而不是全部;而调用getResponseHeader(string)
方法时,传入的参数必须是限制以外的头部名称,否则会报错。XHR对象属性:
responseText:作为响应主体被返回的文本。
responseXml:如果相应的内容类型为XML, 此属性保存响应数据的XML DOM文档; 如果为非XML数据,则为null。
status: 响应的HTTP状态。
statusText:HTTP的状态说明。
readyState:表示请求/响应过程的阶段
0:未初始化;未调用
open()
方法。1:启动;已调用
open()
方法,但未调用send()
方法。2:发送;已调用
send()
方法,但未接收到响应。3:接收;已接收到部分响应数据。
4:完成;已接收到所有响应数据。
备注:
readyState
的值每改变一次,都会触发readystatechange
事件。
- XHR兼容性(2018-11 from www.caniuse.com)
2.创建具有兼容性的XMLHttpRequest对象
function getXHR() {
let xhr = null;
if (window.XMLHttpRequest) {
//IE10+以及其他主流浏览器
xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) {
//IE9及以下、MSXML3、MSXML2.6及以下
let versions = [
'MSXML2.XMLHttp.6.0',
'MSXML2.XMLHttp3.0',
'MSXML2.XMLHttp',
'Microsoft.XMLHttp'
];
for (let i=0; i<versions.length; i++) {
try {
//创建成功结束循环,创建失败抛出错误
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) {
//skip_跳过
}
} }
return xhr;
}
3.封装Ajax请求数据函数
function ajax(opts) {
let xhr = getXHR();
if (xhr) {
//检查参数
let async = opts.async === undefined ? true:opts.async;
let method = opts.method.toUpperCase();
let data = opts.data === undefined ? null:opts.data; xhr.open(method, opts.url, async); //回调函数
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
let status = xhr.status;
if (status >= 200 && status < 300 || status == 304) {
opts.success && opts.success(xhr.responseText, xhr.responseXML); } else {
opts.fail && opts.fail(status);
}
}
} if (method == 'POST') {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
xhr.send(data); } else {
let error = {
message: 'not support ajax.',
code: -1;
}
opts.fail && opts.fail(error);
}
} //使用
ajax({
url: /example,
method: POST,
data: {...},
success: function(){...},
fail: function(){...},
async:true
});
4.备注
最近在看网页向服务端请求数据相关的内容,忽然记起自己还有个blog,于是把markdown中的笔记改改发上来,太懒了,XMLHttpRequest level 2就不写了,现在应该都是用fetch()了。
5.参考
stackoverflow上的答案:https://stackoverflow.com/questions/8567114/how-to-make-an-ajax-call-without-jquery?answertab=votes#。
Ajax与XMLHttpRequest随笔的更多相关文章
- AJAX初探,XMLHttpRequest介绍
AJAX初探,XMLHttpRequest介绍 AJAX AJAX = Asynchronous JavaScript and XML. 异步的JavaScript和XML. AJ ...
- Egret和Http请求 (Ajax、XMLHttpRequest、Post、Get)
一 Http请求 二 AJax和XMLHttpRequest 三 一个Ajax例子 四 Egret中的egret.HttpRequest 五 Post和Get区别 一 Http请求 Http深入 ...
- 原生Ajax(XMLHttpRequest)
一.什么是Ajax: 全称Asynchronous JavaScript and XML: 异步的 JavaScript 和 XML: 可以在不重新加载整个页面的情况下(偷偷发数据),与服务器交换数据 ...
- AJAX(XMLHttpRequest)进行跨域请求方法详解
AJAX(XMLHttpRequest)进行跨域请求方法详解(三) 2010年01月11日 08:48:00 阅读数:24213 注意:以下代码请在Firefox 3.5.Chrome 3.0.Saf ...
- 原生ajax、XMLHttpRequest和FetchAPI简单描述
什么是ajax ajax的出现,刚好解决了传统方法的缺陷.AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个 ...
- js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...
- 原生实现ajax解析--XMLHttpRequest
ajax基础: Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求. 如果仔细观察一个Form的提交,你就会发现,一旦用户点击“Submit ...
- js系列教程11-json、ajax(XMLHttpRequest)、comet、SSE、WebSocket全解
js系列教程11-json.ajax(XMLHttpRequest).comet.SSE.WebSocket全解:https://blog.csdn.net/luanpeng825485697/art ...
- Ajax 与 XmlHttpRequest
AJAX描述了确保Web应用在Web服务器请求新数据的情况下也能(几乎)实时反应的一种方法.具体地说,AJAX只是一些建立已久的技术的相互作用,从HTML.XHTML和HTTP,到JavaScript ...
随机推荐
- 2018.10.15 NOIP训练 hyc的等比数列(数论+枚举)
传送门 一道不错的枚举题. 显然桶排序之后瞎枚举一波. 考虑枚举首项和末项,假设首项除去一个最大的平方因子得到的结果为xxx. 那么末项一定等于xxx乘上一个平方数. 于是我们枚举首项,算出xxx然后 ...
- 2018.09.24 bzoj1016: [JSOI2008]最小生成树计数(并查集+搜索)
传送门 正解是并查集+矩阵树定理. 但由于数据范围小搜索也可以过. 我们需要知道最小生成树的两个性质: 不同的最小生成树中,每种权值的边出现的个数是确定的 不同的生成树中,某一种权值的边连接完成后,形 ...
- ThinkPHP5 union分页
直接贴代码,记录一下,备用 $a = Db::name(表名)->field(字段)->where(条件)->buildSql(); $b = Db::name(表名)->fi ...
- 42 Can stress be Avoided ? 压力能够回避吗 ?
Can stress be Avoided ? 压力能够回避吗 ? ①In the 1960s, medical researchers Thomas Holmes and Richard Rahe ...
- An existing resource has been found at location D:\Tomcat 7\apache-tomcat-7.0.55\webapps。。。
这个错误是说你的资源丢失,就是说tomcat无法解析你的.class文件,需要自己重新配置一下. 解决方法: 右击项目名 ---> 点击properties --> 在搜索栏里 输入 WE ...
- java @option之args4j
args4j简介 args4j是一个用来配置命令行的工具. 在实际的项目中用到命令行的并不是很常见,但当真正使用到时,特别是在程序启动时配置一下参数的时候就很有用了,如果参数很多的话,一个一个解析命令 ...
- html 源码 引入样式
post-title2 示例 sdf post-title 示例
- linux上安装jdk1.8
开发环境centos7, jdk1.8 首先去官网下载jdk1.8的linux64位安装包 进入目录/usr/local/mypackage/java 利用winscp上传jdk安装包 命令tar - ...
- linux cpu过高原因及代码定位
1. top命令查看CPU和内存占用率 top回车,然后按1 发现进程PID 35163 CPU和内存占用率都很高 top - 06:13:47 up 5:31, 1 user, load av ...
- java递归和反向递归
1. 递归查询树tree结构有两种做法: 第一种,递归查询数据库结构, 第二种,一次性将数据库表中的所有数据查出来,然后再递归查出来的list集合, 第一种做法适合数据量较少的tree结构,因为要一直 ...