ajax的理解与工作流程
一、什么是ajax
ajax是一种异步通信技术。在ajax出现之前,客户端与服务端之间直接通信。引入ajax之后,客户端与服务端加了一个第三者--ajax。有了ajax之后,通过在后台与服务器进行少量数据交换,可以达到在不刷新整个页面的情况下实现局部刷新。其原理如图

二、XHR对象
ajax技术的核心是XMLHttpRequest对象(简称XHR)。IE7+、FireFox、Opera、Chrome和Safari都支持原生的XHR对象,创建XHR对象可以这样写
var xhr = new XMLHttpRequest();
那如果要兼容IE6、7又该怎么写
var xhr = new ActiveXObject("MSXML2,XMLHTTP");
因此兼容写法如下
var xhr = '';
window.ActiveXObject ? xhr = new ActiveXObject('MSXML2,XMLHTTP') : xhr = new XMLHttpRequest();
三、XHR用法
创建完XHR对象后,要调用open()方法创建请求,open()方法接受三个参数:
1.要发送的请求的类型(如"get"、"post"等)
2.请求的URL
3.表示是否异步发送请求的布尔值(默认为true,表示异步)
xhr.open("get","index.php",true);
post()请求方法如下面代码
xhr.open("get","index.php",true);
//post()方法必须在send()方法之前加上下面这段代码
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
说明一点:URL相对于执行代码的当前页面,也可以用绝对路径
准备工作做好后,调用send()方法发送请求,
xhr.send(null);
这里get方法传输的数据已经放到url中,可以将参数设置为null
在调用send()方法后,请求就会被分派到服务器,onreadychange捕获请求的状态码,并进行检测
onreadychange对象有个readyState属性,该属性的值表示当前的活动阶段,其值有如下几个:
0:未初始化。尚未调用open()方法
1:启动。已经调用open()方法,但尚未调用send()方法
2:发送。已经调用send()方法,但尚未接收到响应
3:接收。已经接受到部分响应数据
4:完成。已经接受到全部响应数据,并且可以在客户端使用
我们只需判断readyState的值是否为4就可以知道所有数据已经就绪。
xhr.onreadystatechange = function(){
if (xhr.readyState==4) {
//判断状态码是否成功
if (xhr.status>=200&&xhr.status<=207||xhr.status==304) {
//调用ajax的responseText属性返回数据
alert(xhr.responseText);
}else{
alert(xhr.status);
}
}
四、总结
原生ajax的请求总结为一下六个步骤
1.创建XHR对象
2.调用open()方法创建请求
3.调用send()方法发送请求
4.onreadychange捕获请求的状态码
5.判断状态吗是否成功
6.调用ajax的responseText属性返回数据
//拼接路径
function toUrl(url, data) {
//获取时间戳
var time = new Date().getTime();
data.time = time;
var arr = [];
for(var i in data) {
var str = i + "=" + data[i];
//["user"='lili',"pass"="4564522",time="145486456"]
arr.push(str);
}
var str = arr.join("&"); //"user=lili&pass=4564522&time=145486456"
var path = url + "?" + str;
return path;
}
function fnAjax(obj) {
var data = obj.data||{};//可选,如果没有data就新建一个
var path = toUrl(obj.url,data);
var sendType = obj.sendType||"get";
var succFn = obj.succFn||false;
var failFn = obj.failFn||false;
//1、创建一个XMLHttpRequest对象
//兼容写法
if(window.ActiveXObject) {
var ajax = new ActiveXObject("MSXML2,XMLHTTP");//兼容IE6、7
} else {
var ajax = new XMLHttpRequest();//现代浏览器
}
//2、创建一个请求
var time = new Date().getTime();
//判断传送的类型
if (sendType=="get") {
ajax.open("get", path);
ajax.send(path);
}else{
var pathArr = path.split("?");
ajax.open("post", pathArr[0]);// pathArr[0]?之前的内容
//url = "test.txt?time=12365478"
//3、发送请求
//get方法传输的数据已经放到url中,可以将参数设置为null
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(pathArr[1]);//pathArr[1]?之后的内容
}
//4、检测请求的状态
ajax.onreadystatechange = function() {
//如果ajax对象的准备状态发生改变执行事件
//onreadystatechange事件是在readyState属性发生改变时触发的,
//readyState的值表示当前请求的状态,在事件处理程序中可以根据这个值来进行不同的处理。
//5、判断请求的状态
if(ajax.readyState == 4) {
//6、判断请求结果
if(ajax.status >= 200 && ajax.status <= 207 || ajax.status == 304) {
//7、请求成功拿到返回的结果
if (succFn) {
succFn(ajax.responseText);
}
} else {
if (failFn) {
failFn(ajax.status);
}
}
}
}
}
ajax的理解与工作流程的更多相关文章
- MVC — 初步理解IIS工作流程
声明:本文只是自己的总结和积累.IIS7.x 目录 IIS流程及组成部分 ASP.NET流程及组成部分 IIS与ASP.NET MVC 一.IIS流程及组成部分 1.Http.SYS:负责监听HTT ...
- GPU大百科全书索引(有助于理解openGL工作流程)
GPU大百科全书索引 0.GPU大百科全书 前传 看图形与装修的关系 1.GPU大百科全书 第一章:美女 方程与几何 2.GPU大百科全书 第二章 凝固生命的光栅化 3.GPU大百科全书 第三章:像素 ...
- Ajax的工作流程简述
提到Ajax相信我们都不会陌生,不管你是前端开发还是后台数据处理的程序员,ajax的作用就像现在生活中的手机一样,无论是作用还是流程都差不多,这里我们要进行ajax操作后台数据并显示在页面上的话,首先 ...
- 理解Git的工作流程(转)
英文原文:Understanding the Git Workflow 如果你不理解Git的设计动机,那你就会处处碰壁.知道足够多的命令和参数后,你就会强行让Git按你想的来工作,而不是按Git自己的 ...
- 轻松理解Redux原理及工作流程
轻松理解Redux原理及工作流程 Redux由Dan Abramov在2015年创建的科技术语.是受2014年Facebook的Flux架构以及函数式编程语言Elm启发.很快,Redux因其简单易学体 ...
- js.ajax优缺点,工作流程
1.ajax的优点 Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点: 1.最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好. 2.使用异步方式与服务器通信,不 ...
- Redux学习之我对于其工作流程的理解和实践
目录 1 工作流程图 2 各部位职责 3 Demo 1 工作流程图 2 各部位职责 我在理解这个流程图的时候,采用的是一种容易记住的办法,并且贴切实际工作职责. 我们可以把整个Redux工 ...
- 学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat
学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat 2019-05-09 19:28:42 注:项目(MyEclipse)创建的时候选择:Web Service Pr ...
- Ajax学习--理解 Ajax 及其工作原理
Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用 ...
随机推荐
- XML 基础
linux下xml编辑器 vim gedit editix wonderful;免费30天;可以进行有效性检查 xerces oxygen 收费 xmlcopyedit serna free 是ser ...
- LeetCode 64 Minimum Path Sum
Problem: Given a m x n grid filled with non-negative numbers, find a path from top left to bottom ri ...
- studing(来自转载)
1.getchar(): http://www.cnblogs.com/jiangjun/archive/2012/05/16/2503676.html 2.gets()和scanf( ): http ...
- OpenGL中坐标系的理解(一)
在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...
- qt 导入现有的工程不能运行的问题
新导入的工程需在qtcreator的项目选项的构建位置配置一下
- 原生js焦点轮播图
原生js焦点轮播图主要注意这几点: 1.前后按钮实现切换,同时注意辅助图2.中间的button随着前后按钮对应切换,同时按button也能跳转到相应的index3.间隔调用与无限轮播.4.注意在动画时 ...
- 模拟搭建Web项目的真实运行环境(五)
一.开启IIS功能 刚安装完的server2008是没有默认开启IIS功能,在这里简单介绍一下如何开启IIS. 步骤: 1. 打开控制面板,选中[程序] 2. 在[程序和功能]下面,选择[打开或关闭w ...
- OutofMemory之PermGen介绍
可参考:https://my.oschina.net/benhaile/blog/214159.
- 安天移动安全应对“DressCode”威胁,发布企业移动威胁检查工具
近日,一种名为"DressCode"的恶意代码引起了国内安全行业的关注,该恶意代码以企业员工的移动设备作为跳板对企业内网进行攻击,对企业安全造成严重威胁.安天移动安全公司威胁情报团 ...
- postgresql pgsql最新版安装指南及数据存储路径更改及主从配置
postgresql pgsql最新版安装指南及数据存储路径更改及主从配置 安装指南 首先在apt的list添加你当前系统版本对应的apt列表 目前官网有16.04,14.04,12.04 分别对应下 ...