XMLHttpRequest 与 Ajax 概要
关于XMLHttpRequest
开发者使用XMLHttpRequest对象与服务端进行交互(发送http请求、接受返回数据等),可以在不打断用户下一步操作的情况下刷新局部页面。XMLHttpRequest在Ajax中被大量使用。
XMLHttpRequest被应用时的处理机制

(图片来源:developer.mozilla.org)
关于Ajax
Ajax(切勿读为汉语化的“阿贾克斯”,应读英音/ˈeɪˌdʒæks/--“A寨科泗”。。)全称:Asynchronous JavaScript And XML (异步的JavaScript和XML)。
Ajax不仅可以只更新页面中的部分DOM,而且工作流程是异步的,不会阻塞其后面代码的正常执行。
在现代Web标准和实际应用中,Ajax正在逐步地被一些JavaScript框架封装好的方法和官方新的 Fetch API 所替代。
在正式介绍Ajax的使用前,我们认识下IE中的一个与XMLHttpRequest对象相应的概念(尽管后续它不会再被提及):
var ajax = new ActiveXObject('Microsoft.XMLHTTP');
深入了解XMLHttpRequest
// xhr对象的构造函数,用来实例化一个xhr对象。
XMLHttpRequest()
// xhr的常用属性 /* 1. onreadystatechange属性将指向一个事件处理函数,当xhr的readyState属性发生变化时被触发 */
xhr.onreadystatechange
// usage:
xhr.onreadystatechange = callback; /* 2. --ReadOnly-- readyState属性将返回当前请求的状态 */
xhr.readyState // usage:
const xhr = new XMLHttpRequest();
console.log('UNSENT', xhr.readyState); // readyState will be 0 xhr.open('GET', '/api', true);
console.log('OPENED', xhr.readyState); // readyState will be 1 xhr.onprogress = function () {
console.log('LOADING', xhr.readyState); // readyState will be 3
}; xhr.onload = function () {
console.log('DONE', xhr.readyState); // readyState will be 4
}; xhr.send(); // 具体示意如下图(插播一条广告):

/* 3. 获取或设置responseType(符合XMLHttpRequestResponseType规范的字符串) */
xhr.responseType // usage:
const resType = xhr.responseType;
// or
xhr.responseType = 'json'; // XMLHttpRequestResponseType具体如下(插播第二条广告):

/* 4. --ReadOnly-- response返回响应体所包含的内容,内容格式由responseType决定 */
xhr.response // usage:
const result = xhr.response; // 注:在responseType为''或者'text'时,response 和 responseText 可以相互替用 /* 5. --ReadOnly-- status属性将返回数字类型的http状态码 */
xhr.status // usage:
const status = xhr.status; /* 6. --ReadOnly-- statusText将返回响应状态的文本描述,分别有''、'OK'、'Not Found' */
xhr.statusText // usage:
const statusText = xhr.statusText; /* 7. timeout属性将指定请求自动终止的毫秒数,默认为零,即没有超时设置 */
xhr.timeout // usage:
const xhr = new XMLHttpRequest();
xhr.open('GET', '/api', true); xhr.timeout = 5000; xhr.onload = function () { // Request finished. }; xhr.ontimeout = function (e) {
// when XMLHttpRequest timed out ...
}; xhr.send();
// xhr 的常用方法 /* 1. open 方法将创建一个新的http请求或者重新发送一个已有请求 */
xhr.open(method, url [, async, username, password]) // usage:
xhr.open('GET', '/api'); /* 2. send 方法将向服务器发送一个请求 */
xhr.send(body) // usage:
xhr.send(); /* 3. abort 方法将退出一个已有请求 */
xhr.abort() // usage:
xhr.abort(); /* 4. XMLHttpRequestEventTarget.onload (注:不是xhr的方法,而是事件)*/
xhr.onload // usage:
xhr.onload = callback; /* 5. setRequestHeader 可以设置一个http请求头的值 */
xhr.setRequestHeader(headername, value) // usage:
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api');
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { //... }; xhr.send("foo=bar&lorem=ipsum");
实际编程中Ajax和XMLHttpRequest的应用
// 简单示例
const XHR = new XMLHttpRequest();
const handleReadyStateChange = () => {
try {
if (XHR.readyState === XHR.DONE) {
if (XHR.status === 200) {
console.log(XHR.response);
} else {
throw new Error('request failed!');
}
}
} catch (ex) {
console.error('Caught Exception: ' + ex.message);
}
}; function generateRequest(type, api, body = null) {
if (!XHR) {
console.error('Cannot find XMLHttpRequest object!');
return false;
} XHR.onreadystatechange = handleReadyStateChange;
XHR.open(type, api);
XHR.send(body);
}
-- 待续
XMLHttpRequest 与 Ajax 概要的更多相关文章
- Ajax概要:
Ajax概要: Ajax不是个全新的技术,它是多种技术合并在一起产生的,包括XHTML,CSS,JavaScript,XmlHttpRequest,XML,JSON,DOM等 优点:(这也解释了为何我 ...
- 结合prototype和xmlhttprequest封装ajax请求
由于拖延症的严重以及年前准备年会(借口*^__^*) 导致这个小的的思考 现在才算完成 再怎么说也算是上班以来带我的前辈第一次这么正式的给我出题 不管是出于尊重还是自我要求我都决定把它简要的记下来 ...
- Ajax-03 XmlHttpRequest实现Ajax
概述 Ajax主要就是使用XmlHttpRequest对象来完成请求的操作,该对象在主流浏览器中均存在 XmlHttpRequest对象的主要方法 a. void open(String method ...
- XMLHttpRequest实现Ajax异步请求
一.XMLHttpRequest的方法 方法 描述 abort() ...
- C# XMLHttpRequest对象—Ajax实例
Get: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...
- 《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方式
一.AJAX概述 AJAX是Asynchronous JavaScript and XML的缩写.中文译作异步JavaScript和XML.AJAX 不是新的编程语言,而是一种使用现有标准的新方法.在 ...
- 用纯XMLHttpRequest实现AJAX
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 使用 XMLHttpRequest实现Ajax
[XMLHttpRequest的概述] 1.XMLHttpRequest最早是在IE5中以ActiveX组件的形式实现的.非W3C标准 2.创建XMLHttpRequest对象(由于非标准所以实现方法 ...
- Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
随机推荐
- 17-EasyNetQ:非泛型的发布&订阅扩展方法
自从EasyNetQ第一个版本开始,它就可以发布/订阅特定类型的消息. bus.Subscribe<MyMessage>("subscriptionId", x =&g ...
- vmware 仅主机模式 ip配置
首先关闭防火墙 主机(宿主机器 win7) 虚拟机(xp) 3..重要提示: 如果ping不通首先考虑防火墙的问题!!! vmware配置: nat模式下玩耍: 1. 配置nat的虚拟网卡: 2. ...
- 【294】◀▶ Python 字符串说明
目录: 一.Python访问字符串中的值 二. Python 转义字符 三.Python 字符串运算符 参考:Python 字符串 一.Python访问字符串中的值 Python不支持单字符类型, ...
- Linux字符设备驱动实现
Linux字符设备驱动实现 要求 编写一个字符设备驱动,并利用对字符设备的同步操作,设计实现一个聊天程序.可以有一个读,一个写进程共享该字符设备,进行聊天:也可以由多个读和多个写进程共享该字符设备,进 ...
- <转>Linux环境进程间通信--信号灯(四)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/ 一.信号灯概述 信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机 ...
- C程序栈内存堆内存的地址
#include <stdio.h> #include <malloc.h> int main() { char * p1, * p2; p1=(char *)malloc(2 ...
- Leetcode:Container With Most Water分析和实现
题目大意是提供n个非负整数,a1,...,an,可以将其理解为多个边界(垂直的线段),其中ai处于x坐标i处,并且ai代表的线段高度即为ai的值.要求我们取这样的i与j,使得ai与aj以及x坐标轴围成 ...
- idea maven项目依赖项有红色波浪线
在maven面板选中所有报错的maven项目,右键选择移除(remove),之后重新添加.
- 多重if else和switch case的区别
int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...
- c语言实践 用1角 2角 5角 凑成10元钱的方法
/* 用1角,2角,5角凑出10元钱,有几种办法. 也就是0.1a+0.2b+0.3c=10,化简一下就是 a=100-2b-3c 因为a的范围是0到100,所以弄一个循环 把a的值从0尝试到100, ...