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 表单并确定应用 ...
随机推荐
- [PHP][REDIS]phpredis 'RedisException' with message 'read error on connection'
最近一个后台常驻job通过redis的brpop阻塞读取消息时,设置了永不超时 while( $re=$redis->brPop($queue_name,0) ){ } 但是在实际的使用中发现很 ...
- SQL Server删除重复行的6个方法
SQL Server删除重复行是我们最常见的操作之一,下面就为您介绍六种适合不同情况的SQL Server删除重复行的方法,供您参考. 1.如果有ID字段,就是具有唯一性的字段 delect ta ...
- JDBC的操作总结
JDBC 操作总结 JDBC是一组能够执行SQL语句的API JDBC的操作方式比较单一,简单的分为以下几个流程: 1.通过数据库厂商提供的JDB类库想DriverManager注册数据库驱动 ...
- IO边读边写
using (FileStream fs = new FileStream(@"C:\Users\Desktop\lijia1.txt",FileMode.Open)) ...
- Fedora 安装gcc gcc-c++
Fedora本身没有自带gcc 和 g++编译器,所以需要我们自己去安装,步骤如下: 1.切换到root用户(或者跳过这个步骤,直接在下面命令前面加上 sudo) su root 2.安装gcc yu ...
- retrofit使用随记
1.请求接口 public interface RetrofitApi { /*注册*/ /*登录*/ @FormUrlEncoded //post请求带这个 @POST("url" ...
- sql server 锁
锁模式 锁模式 说明 共享 (S) 用于不更改或不更新数据的读取操作,如 SELECT 语句. 更新 (U) 用于可更新的资源中. 防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式 ...
- C 标准库系列之ctype.h
ctype.h 主要提供了一些函数用以测试字符或字符处理的功能函数:包括字符判断检测.字符转换: 目前ASCII字符可分为以下一些类型,如:大写.小写.字母.数字.十六进制.空白字符.可打印字符.控制 ...
- Duilib源码分析(二)控件构造器—CDialogBuilder
上一节了解了大体流程,但是界面控件元素是如何被加载.解析.构建.管理.控件消息如何处理的呢?接下来我们将结合控件构造器进行分析: CDialogBuilder:控件构造器,主要用以解析xml配置文件并 ...
- 一个轻量级分布式RPC框架--NettyRpc
1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...