ajax并非是一门新的技术,而是现有技术的一种新的组合用法,即是结合异步javascript和XML,它是一种创建快速动态网页的技术。其中,异步javascript是相对于同步而言的,同步模式通常称为阻塞模式,即它会停止浏览器的后续解析,可想而知异步就是在浏览器下载js的同时,继续执行后续页面处理。接下来开始了解一下ajax的原理。

       XMLHttpRequest 
    XMLHttpRequest对象是用于在后台和数据库之间交换数据的,它能够在不重新加载页面的情况下更新页面,页面已经加载之后能够请求和接收服务器的数据,还能够在后台向服务器发送数据。并且它被所有现在浏览器所支持。
    创建XMLHttpRequest的方式也很简单,现在浏览器中:
     
     xmlhttp = new XMLHttpRequest();

    在老版本的浏览器中(IE6/IE5):
    
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    ​为了让代码兼容所有的浏览器(包括IE6、IE5),将代码修改如下:
     var xmlhttp;
if(window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6/IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
     向服务器端发送请求
     发送请求一共有两个方法:open()和send();

     open()方法一共有三个参数,格式如下:
     xmlhttp.open(method,url,async);


    参数的含义:
    method:发送数据的方式,一共有两种,get
和 post.get速度快,大多数情况之下都选用get,但可传数据有限并且会显示在url之中,安全性能方面不是很好;post相较get方法速度稍慢,但安全性高,且可传的数据量大得多;
    url:发送的目标,即文件在服务器上的位置。该文件可以为任意类型,.txt/.xml或者脚本.php等等;
    async:true(异步)/false(同步)。

    send()方法只有一个参数,且为可选,有参数的情况下必为post的请求方式。
    xmlhttp.send(string);

这里举一个简单的例子:
    xmlhttp.open("GET","demo_get.php?name=admin&name=123",true);
xmlhttp.send();
    服务器响应
   上一步向服务器发送请求,那么接下来无疑就是服务器的响应了。
    服务器响应需要通过XMLHttpRequest的responseText()或responseXML()来获取。它们都能获取响应数据,只是返回的数据格式不同。responseText()返回的是文本格式的数据,responseXML()返回的是xml格式的数据。如果需要将返回的数据显示到页面上,分别需要如下操作:
responseText():
document.getElementById('dataShow').innerHTML=xmlhttp.responseText();
responseXML():
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("data");
for (i=0;i<x.length;i++){
txt=txt + x[i].childNodes[0].nodeValue + "<br />";
}
document.getElementById("dataShow").innerHTML=txt;

上述例子中async的选项如果为false,即选择的是同步方式。那么整个的请求与响应以及显示的过程如下:

    xmlhttp.open("GET","demo_get.php?name=admin&name=123",true);
xmlhttp.send()
document.getElementById("dataShow").innerHTML=xmlhttp.responseText;

但是上述选项为true,即选择的是异步方式,则整个请求响应过程如下所示:

    xmlhttp.open("GET","demo_get2.php?name=bob&name=456",true);
xmlhttp.send()
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById("dataShow").innerHTML=xmlhttp.responseText;
}
}
    客户端发送了一个请求之后,并不知道服务器端什么时候完成这个请求,所以需要有一个能够捕获该请求的状态,上述代码中的onreadystatechange事件就是能够完成这个功能的一个事件。onreadystatechange事件可以根据readystate的状态来指定一个回调函数,使之在不同的状态有不同的处理。
    readystate一共有5中取值:
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中

4: 请求已完成,且响应已就绪  

在判断条件(xmlhttp.readyState==4&&xmlhttp.status==200)中除了readystate之外还有status状态的查询,status又表示什么含义呢?
    status常见的状态码:
    HTTP: Status 200 – 服务器成功返回网页,服务器已成功处理了请求.通常,这表示服务器提供了请求的网页。
    HTTP: Status 404 – 请求的网页不存在
    HTTP: Status 503 – 服务不可用
因此,上述的判断条件是当客户端请求完成且服务器端成功处理了请求并成功返回网页,在这些条件下,将返回的数据显示到页面。

ajax的原理及使用的更多相关文章

  1. Ajax工作原理

    在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...

  2. 关于Ajax工作原理

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  3. Ajax工作原理(转)

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  4. ajax请求原理及jquery $.ajax封装全解析

    .ajax原理: Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得 ...

  5. Ajax的原理和运行机制

    关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流行.当然,它并不是什么新技术,而是在各种已有的技术和支持机制下的一个统一.在我的项目中,偶尔也会用到ajax,用来给用户一些无刷新的体验. ...

  6. Ajax 技术原理(转)

    Ajax 技术原理 2010-01-04 原文出处:http://www.nowamagic.net/ajax/ajax_AjaxPrinciple.php 在写这篇文章之前,曾经写过一篇关于AJAX ...

  7. (转)Ajax的原理和应用

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  8. aJax学习之Ajax工作原理

    转自:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html 在写这篇文章之前,曾经写过一篇关于AJAX技术的 ...

  9. ajax请求原理

    首先分析使用ajax时候有那些不确定的因素 请求:1 请求的方式不确定 2 请求的地址不确定 3 请求是否异步不确定 4 发送的数据不确定 响应:5 返回的数据不确定 6 响应成功之后 需要处理的业务 ...

  10. ajax的原理解析

    一.关于同步与异步的分析: 异步传输是面向字符的传输,它的单位是字符:而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的.而ajax就是采用的异步请求方式的. ...

随机推荐

  1. Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库

    1. Redis 恢复的机制 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据: 如果只配置 RDB,启动是将加载 d ...

  2. Windows重装系统

    本文主要针对那些不会重装系统windows的用户,虽然重装系统win7或win10很简单,但是还是有一些小白不明白如何安装新系统,也不清楚有几种安装方式.本教程现在就详细的讲讲利用U盘重装系统的具体步 ...

  3. linux进程状态详解(转)

    Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态.  在下文将对进程的 R.S.D.T.Z.X 六种状态做个说明. PROCESS ...

  4. Hibernate学习之单向多对一映射

    © 版权声明:本文为博主原创文章,转载请注明出处 说明:该实例是通过映射文件和注解两种方式实现的.可根据自己的需要选择合适的方式 实例: 1.项目结构 2.pom.xml <project xm ...

  5. WAS集群系列(3):集群搭建:步骤1:准备文件

    说明:"指示轨迹"为"点选顺序",截图为点击后效果截图 环境 项目点 指标 WAS版本号 7.0 操作系统 Windows 2008 系统位数 64bit 内存 ...

  6. entity framework core 调用存储过程和方法

    目前EF Core调用存储过程,限制很多,比如返回结果必须是定义好的DbSet<>等等.这里用一种曲线救国的方式,自定义两个方法,用原始ado.net解决问题.以MySql数据库为例,代码 ...

  7. hibernate双向一对多映射

    双向多对一 :Customer类------------>一的一端   Order类----------->多的一端 Customer类:(省略set().get()和构造方法) priv ...

  8. Android下的数据存储与访问、权限

    弹出吐司 在onCreate中可以先获取控件对象 /data/data/程序的包名/          在这个目录下面进行文件的读写可能因为包名的改变而变得不可靠. this可以是Activity,也 ...

  9. dede后台title怎么修改的?去掉XXXX-织梦内容管理系统V5.7

    dede后台title怎么修改的? 去掉XXXX-织梦内容管理系统V5.7 打开include/common.inc.php的文件. $cfg_version = 'V57_UTF8_SP1';(这是 ...

  10. Python 自动化之验证码识别

    之前公司的验证码比较简单,可以采取直接破解的方式进行登录 部分代码如下: # -*- coding: utf-8 -*- from selenium import webdriver from sel ...