createTime--2016年9月19日13:59:11
Author:Marydon
参考链接
http://blog.csdn.net/csh624366188/article/details/7670500
  Ajax(Asynchronous JavaScript and XML),异步的JavaScript与XML 。所谓同步,就是在进行一个操作之前必须要等到上一个操作返回操作结果才能进行这个操作,而异步则是在进行一个操作时可以不受上一个操作的影响,上一个操作是否返回操作都可以执行这个操作,各个操作可以同时进行,对用户来说,不用等待了,不用等待上一个操作就可以执行新的操作了。给用户的体验增强了。异步传输是面向字符的传输,它的单位是字符;而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的。 其实ajax并不是什么新技术,而是一些技术的组装。Ajax给我们的网络带来了很大的好处,假如我们只是简单的提交一个表单,我们就没必要刷新整个页面,只需要局部表单提交,刷新局部就可以了,这将大大减少了网络流量。有优点的同时他也有缺点,缺点就是我们浏览器上的后退和前进按钮就失效了。假如我们页面有三个异步ajax操作,浏览器并不把他当作三个请求操作,后退的时候也不会后退三次回到原始页面
  Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
  Ajax中最重要的一个对象就是XMLHttpRequest,这个对象最早是由微软在IE中以插件的形式提供的,但微软只是简单的提出这么一个对象,并没有真正的去实用它,后来其他浏览器也给出了这个对象,但他们都是提供的内置对象,而不是简单的插件的形式了。所以在获得这个对象的时候就避免不了要用if。。Else判断了、判断是否为IE浏览器,我们使用判断一个对象是否存在来判断,这个对象是IE所特有的,他就是active控件的对象。通过window.ActiveXObject,在if语句中写这么语句,因为在javascript中,如果不是undefined或者false他就是为true,所以,只要这个active空间存在,if条件就为真。也就是说就是IE浏览器。IE获得XMLHttpRequest对象是一个固定形式:xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");这是IE特有的获得XMLHttpRequest对象的方式,其他浏览要想获得XMLHttpRequest对象直接new就可以,也就是xmlHttpRequest =new XMLHttpRequest();虽然IE和其他浏览器获得XMLHttpRequest对象的方式是不同的,但是XMLHttpRequest的使用方式是一样的。
好了,判断完浏览器之后,我们就开始准备向服务器发送请求了,准备发送请求我们用:xmlHttpRequest.open("POST", "AjaxServlet", true);这里的三个参数我们有必要说一下,第一个参数是表示我们的请求是以什么形式发送,第二个参数是我们请求的地址,这里我们的地址是一个servlet,第三个参数指明是否为以异步的形式发送请求,一般我们都会设置为true。
  准备好发送以后,我们要给他接收做一下准,ajax接收数据是以一个回调函数的形式接收数据的。也就是说我们注册好这个回调函数后,当达到某一要求时他会自动调用这个回调函数,然后去执行回调函数的内容,注册回调函数:xmlHttpRequest.onreadystatechange = ajaxCallback;注意这个回调函数ajaxCallback不要带括号。这个回调函数注册点我们从字面上也可以看出,他是在准备状态改变的时候调用这个函数。
  一切准备好之后我们就要进行真正的发送请求了,发送请求是调用的xmlHttpRequest对象的send方法,这个方法里面当以post的形式发送请求,这里的方法的参数,就是我们请求的地址的参数,这个地址的参数是以键值对的形式传参的,如果是以get的形式请求时,我们可以把send方法的参数设置为null。,假如我们是以get的请求方式,发送代码即为了:xmlHttpRequest.send(null);,我们在来说说以post的请求方式请求时。xmlHttpRequest.send(null),null可以传参数(即send(“v1="+v1));并且在真正发送之前(xmlHttpRequest.send(null))之前必须设置xmlHttpRequest.setRequestHeader("content-type","application/x-www-form-urlencoded");这一点一定要注意。
  OK,请求发送出去了之后,我们下面来看一下我们怎么来接受请求返回的数据。根据HTTP协议我们应该知道,我们的一个请求应该分为四个步骤,也就是说一个请求有四个状态,他的状态即为xmlHttpRequest对象的readstate属性。我们来看一下这五个状态的具体内容:
从上边可以看出我们上边注册的回调函数将会被执行四次,但是我们其实就只在请求完成时执行我们回调函数的内容就OK,所以在回调函数里面我们可以进行一下判断
  if (xmlHttpRequest.readyState == 4) { //请求完成}。
  虽然我们判断了请求是否完成,但我们不知道这个请求是否成功,在我们http协议中,请求成功的状态码是200,所以我们如下判断一下状态码是否为200就可以了。
  if (xmlHttpRequest.status == 200) {}
  演示
    见web项目demo-ajax

 

ajax-原理分析的更多相关文章

  1. OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法

    OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...

  2. Servlet过滤器介绍之原理分析

    zhangjunhd 的BLOG     写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...

  3. Ajax原理,技术封装与完整示例代码

    在做项目和学习的时候,经常用到Ajax的相关技术,但是这方面的技术总是运用的不是十分好,就寻找相关博客来学习加深Ajax技术相关. 一.Ajax简介 二.同步.异步传输区别 2.1 异步传输 2.2 ...

  4. Handler系列之原理分析

    上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...

  5. Java NIO使用及原理分析(1-4)(转)

    转载的原文章也找不到!从以下博客中找到http://blog.csdn.net/wuxianglong/article/details/6604817 转载自:李会军•宁静致远 最近由于工作关系要做一 ...

  6. 原子类java.util.concurrent.atomic.*原理分析

    原子类java.util.concurrent.atomic.*原理分析 在并发编程下,原子操作类的应用可以说是无处不在的.为解决线程安全的读写提供了很大的便利. 原子类保证原子的两个关键的点就是:可 ...

  7. Android中Input型输入设备驱动原理分析(一)

    转自:http://blog.csdn.net/eilianlau/article/details/6969361 话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反 ...

  8. 转载:AbstractQueuedSynchronizer的介绍和原理分析

    简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础.使用的方法是继承,子类通过 ...

  9. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

  10. NOR Flash擦写和原理分析

    NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...

随机推荐

  1. 视图Ext.Viewport和窗口Ext.Window用法

    Viewport不需要再指定renderTo,而我们也看到Viewport确实填充了整个浏览器显示区域,并会随着浏览器显示区域大小的改变而改改.他有三个特点: 1).创建即可使用.不需要渲染,当组件在 ...

  2. 单独配置secondarynamenode

    一.配置说明 这是在我之前yarn框架上通过加入节点,改动相关的配置文件,使得secondarynamenode独立出来的,所以这里前期的一系列琐碎配置请參考我之前的博客: http://blog.c ...

  3. 内存控制篇calloc free getpagesize malloc mmap munmap

    calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #include <stdlib.h> 定义函数 void *calloc(size_t ...

  4. Python、Lua和Ruby比较——脚本语言大P.K.

    译者按:Python.lua和ruby在C/C++是日渐式微的情况下,在java/.net的围歼中努力抗争的三个当红小生.在Tom Gutschmidt的著作<Game Programmng w ...

  5. 【POJ】【2187】Beauty Contest

    计算几何/旋转卡壳 学习旋转卡壳请戳这里~感觉讲的最好的就是这个了…… 其实就是找面积最大的三角形?...并且满足单调…… 嗯反正就是这样…… 这是一道模板题 好像必须写成循环访问?我在原数组后面复制 ...

  6. Flume-NG一些注意事项(转)

    原文链接:记Flume-NG一些注意事项 这里只考虑flume本身的一些东西,对于JVM.HDFS.HBase等得暂不涉及.... 一.关于Source: 1.spool-source:适合静态文件, ...

  7. OpenCV学习(36) 人脸识别(1)

    本文主要参考OpenCV人脸识别教程:http://docs.opencv.org/modules/contrib/doc/facerec/facerec_tutorial.html 1.OpenCV ...

  8. OpenCV学习(29) 凸包(convexhull)

    在opencv中,通过函数convexHulll能很容易的得到一系列点的凸包,比如由点组成的轮廓,通过convexHull函数,我们就能得到轮廓的凸包.下面的图就是一些点集的凸包. 求凸包的代码如下: ...

  9. Redhat Linux FTP配置

    文件传输协议(FTP:FileTransfer Protocol)使得主机间可以共享文件. FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输.控制连接 ...

  10. 第十六章 springboot + OKhttp + String.format

    模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...