一、什么是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的理解与工作流程的更多相关文章

  1. MVC — 初步理解IIS工作流程

    声明:本文只是自己的总结和积累.IIS7.x 目录 IIS流程及组成部分 ASP.NET流程及组成部分 IIS与ASP.NET  MVC 一.IIS流程及组成部分 1.Http.SYS:负责监听HTT ...

  2. GPU大百科全书索引(有助于理解openGL工作流程)

    GPU大百科全书索引 0.GPU大百科全书 前传 看图形与装修的关系 1.GPU大百科全书 第一章:美女 方程与几何 2.GPU大百科全书 第二章 凝固生命的光栅化 3.GPU大百科全书 第三章:像素 ...

  3. Ajax的工作流程简述

    提到Ajax相信我们都不会陌生,不管你是前端开发还是后台数据处理的程序员,ajax的作用就像现在生活中的手机一样,无论是作用还是流程都差不多,这里我们要进行ajax操作后台数据并显示在页面上的话,首先 ...

  4. 理解Git的工作流程(转)

    英文原文:Understanding the Git Workflow 如果你不理解Git的设计动机,那你就会处处碰壁.知道足够多的命令和参数后,你就会强行让Git按你想的来工作,而不是按Git自己的 ...

  5. 轻松理解Redux原理及工作流程

    轻松理解Redux原理及工作流程 Redux由Dan Abramov在2015年创建的科技术语.是受2014年Facebook的Flux架构以及函数式编程语言Elm启发.很快,Redux因其简单易学体 ...

  6. js.ajax优缺点,工作流程

    1.ajax的优点 Ajax的给我们带来的好处大家基本上都深有体会,在这里我只简单的讲几点: 1.最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好.  2.使用异步方式与服务器通信,不 ...

  7. Redux学习之我对于其工作流程的理解和实践

      目录 1 工作流程图 2 各部位职责 3 Demo   1 工作流程图   2 各部位职责 我在理解这个流程图的时候,采用的是一种容易记住的办法,并且贴切实际工作职责. 我们可以把整个Redux工 ...

  8. 学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat

    学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat 2019-05-09   19:28:42 注:项目(MyEclipse)创建的时候选择:Web Service Pr ...

  9. Ajax学习--理解 Ajax 及其工作原理

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写. 下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用 ...

随机推荐

  1. windows 中去除Ctrl+Alt+Del才能登录

    安装windows 7后登录的时候有一样很麻烦的步骤是需要先按Ctrl+Alt+Del,才能输入用户密码进行登录.这里笔者介绍一下如何取消这个东西. 点击“开始菜单”,点击“控制面板”. [管理工具] ...

  2. 订货(bzoj 2424)

    Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...

  3. WPF 动画显示控件

    当我们要显示一个控件的时候,不仅仅要显示这个控件,还要有动画的效果. 主要用到了DoubleAnimation类. public static void ShowAnimation(object co ...

  4. Lintcode 82.落单的数

    -------------------------------- 这道题好坑啊,自己说是2*n+1个数字,结果有组测试数据竟然传了个空数组进来... 经典位算法: n^n==0 n^0==n AC代码 ...

  5. 重装系统后如何删除系统自带的office2003

    背景:操作系统重装后,系统自带的office2003版本太低不好使用,需要安装更高版本的如2010,但是卸载时提示“无法打开此修补程序包……”,从而无法卸载.经网上查询,采用以下解决办法: 在注册表中 ...

  6. 手把手教你玩转nginx负载均衡(一)----使用vitualBox创建虚拟机

    引言 作为一个web程序员,有时候需要想尽办法来利用有限的资源来产生最大程度的负载,除了提高硬件配置,增加带宽之外,CDN加速,DNS加速,缓存,还可以利用反向代理.但是要说反向代理,就不的不说ngi ...

  7. Tensorflow- tensor的列操作

    几个point [:,i]类似python直接的index 列操作是可行的, 注意i不能是variable,如果是使用slice slice操作会保持和输入tensor一样的shape 返回 而1对应 ...

  8. Oracle事务

    Oracle事务的ACID特性 原子性Atomicity:事务中的所有动作要么都发生,要么都不发生. 一致性Consistency:事务将数据库从一种状态转变为下一种一致状态. 隔离性Isolatio ...

  9. js倒计时

    /** * 启动,秒杀倒计时 * totalSecond:剩余秒数 * showTime(tm):回调函数,其中tm={day:"",hour:"",min:& ...

  10. linux 命令 ---- 同步当前服务器时间

    原因:昨天临走前,虚拟机没有关机,是挂起状态,然后今天来的时候,发现数据库表中存(更新)的时间,不是系统时间, 解决:先运行起我们的虚拟机, (对于asterisk) 1.先查看当前服务器(linux ...