Ajax技术基本应用

1.Ajax 简介

1.1Ajax 是什么?  

Ajax (Asynchronous JavaScript and XML) 是一种Web应用技术,可以借助客户端脚本(javascript)与服务端应用进行异步通讯,获取服务端数据以后,可以进行局部刷新。进而提高数据的响应和渲染速度。

传统Web应用中简易的同步模型分析,如图-1所示:

 Ajax技术基本应用

 

 

基于Ajax技术的异步请求响应模型分析,如图-2所示:

 Ajax技术基本应用

 

 

1.2Ajax 技术应用场景?

Ajax技术最大的优势就是底层异步,然后局部刷新,进而提高用户体验,这种技术现在在很多项目中都有很好的应用,例如:

  • 商品系统。

  • 评价系统。

  • 地图系统。

  • …..

AJAX可以仅向服务器发送并取回必要的数据,并在客户端采用JavaScript处理来自服务器的响应。这样在服务器和浏览器之间交换的数据大量减少,服务器响应的速度就更快了。但Ajax技术也有劣势,最大劣势是不能直接进行跨域访问。

1.3Ajax 技术时序模型分析?  

传统Web应用中的,同步请求应用时序模型分析,如图-3所示:

 Ajax技术基本应用

 

 

在图-3中,客户端向服务端向服务端发送请求需要等待服务端的响应结果,服务端返回数据以后,客户端可以继续发送请求。

 基于Ajax技术的Web异步请求响应模型如图-4所示:

 Ajax技术基本应用

 

 

在图-4中,客户端可以向服务端发送异步请求,客户端无需等待服务端的响应结果,可以不断向服务端发送请求。

 

2.Ajax 快速入门

2.1 Ajax 请求响应过程分析

所有的Ajax 请求都会基于DOM(HTML元素)事件,通过XHR(XMLHttpRequest)对象实现与服务端异步通讯局部更新,如图-4所示:

 Ajax技术基本应用

 

 

2.2 Ajax 编程基本步骤分析

第一步:基于dom事件创建XHR对象(XMLHttpRequest对象)

第二步:注册XHR对象状态监听,通过回调函数(callback)处理状态信息。

第三步:创建与服务端的连接

第四步:发送异步请求实现与服务端的通讯

第五步:通过回调(callback)函数,获得响应结果并进行数据更新.(非阻塞)

2.3 Ajax 请求响应编程操作实践

基于ajax技术中的XMLHttpRequest对象,向服务端发起异步Get请求,关键代码分析如下:

function doAjaxGet(url,params,callback){
      //1.创建XmlHttpRequest对象
      var xhr=new XMLHttpRequest();
      //2.设置状态监听,监听XmlHttpRequest对象与服务端通讯的过程(例如连接是否建立,请求是否在处理,响应是否已产生)
      xhr.onreadystatechange=function(){//callback(回调函数)
        //基于xhr对象获取的通讯状态,对响应数据进行处理

        //readyState状态说明

        //0:未初始化,尚未调用open() 方法

        //1:启动。已经调用open() 方法,但尚未调用send() 方法

        //2:发送。已经调用send() 方法,但尚未接收到响应

        //3:接收。已经接收到部分响应

        //4:完成。已经接收到全部响应数据,而且已经可以在客户端使用了

        

             if(xhr.readyState==4&&xhr.status==200){//500表示服务端出错了
          //服务端响应的结果会传递给XHR对象,我们可以借助responseText获取响应结果
          callback(xhr.responseText);
          }
      }
    //3.创建与服务端的连接
      xhr.open("GET",url+"?"+params,true);//true表示异步
      //4.发送请求
      xhr.send(null); //Get请求,send方法不传内容
    //5.对响应结果进行处理(在回调函数中处理)。
}

2.4 Ajax Post 请求操作实现

基于ajax中XMLHttpRequest对象,向服务端发起异步Post请求。对于post请求在发送请求执行需要设置请求头,见红色代码部分。

 

function doAjaxPost(url,params,callback){
//1.创建XmlHttpRequest对象
var xhr=new XMLHttpRequest();
//2.设置状态监听,监听XmlHttpRequest对象与服务端通讯的过程.
xhr.onreadystatechange=function(){//callback(回调函数)
//基于xhr对象获取的通讯状态,对响应数据进行处理
if(xhr.readyState==4&&xhr.status==200){//500表示服务端出错了
//服务端响应的结果会传递给XHR对象,
                  //我们可以借助xhr.responseText获取响应结果
callback(xhr.responseText);
}
}
//3.创建与服务端的连接
xhr.open("POST",url,true);//true表示异步
xhr.setRequestHeader("Content-Type",
      "application/x-www-form-urlencoded");
//4.发送请求
xhr.send(params); //post请求将参数写到send方法
//5.对响应结果进行处理(在回调函数中处理)。
}

 

什么是readyState
readyState是XMLHttpRequest对象的一个属性,用来标识当前XMLHttpRequest对象处于什么状态。
readyState总共有5个状态值,分别为0~4,每个值代表了不同的含义

0:初始化,XMLHttpRequest对象还没有完成初始化
1:载入,XMLHttpRequest对象开始发送请求
2:载入完成,XMLHttpRequest对象的请求发送完成
3:解析,XMLHttpRequest对象开始读取服务器的响应
4:完成,XMLHttpRequest对象读取服务器响应结束
 

status是XMLHttpRequest对象的一个属性,表示响应的HTTP状态码
在HTTP1.1协议下,HTTP状态码总共可分为5大类

1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
 
100——客户必须继续发出请求
101——客户要求服务器根据请求转换HTTP协议版本
200——交易成功
201——提示知道新文件的URL
202——接受和处理、但处理未完成
203——返回信息不确定或不完整
204——请求收到,但返回信息为空
205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
206——服务器已经完成了部分用户的GET请求
300——请求的资源可在多处得到
301——删除请求数据
302——在其他地址发现了请求数据
303——建议客户访问其他URL或访问方式
304——客户端已经执行了GET,但文件未变化
305——请求的资源必须从服务器指定的地址得到
306——前一版本HTTP中使用的代码,现行版本中不再使用
307——申明请求的资源临时性删除
400——错误请求,如语法错误
401——请求授权失败
402——保留有效ChargeTo头响应
403——请求不允许
404——没有发现文件、查询或URl
405——用户在Request-Line字段定义的方法不允许
406——根据用户发送的Accept拖,请求资源不可访问
407——类似401,用户必须首先在代理服务器上得到授权
408——客户端没有在用户指定的饿时间内完成请求
409——对当前资源状态,请求不能完成
410——服务器上不再有此资源且无进一步的参考地址
411——服务器拒绝用户定义的Content-Length属性请求
412——一个或多个请求头字段在当前请求中错误
413——请求的资源大于服务器允许的大小
414——请求的资源URL长于服务器允许的长度
415——请求资源不支持请求项目格式
416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求
500——服务器产生内部错误
501——服务器不支持请求的函数
502——服务器暂时不可用,有时是为了防止发生系统过载
503——服务器过载或暂停维修
504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——服务器不支持或拒绝支请求头中指定的HTTP版本
 上述代码可分为四部分  如图所示
 
 
Ajax技术基本应用
调用关系 如图
Ajax技术基本应用

 

 Ajax技术基本应用

 

 也可以将代码放入一个指定的js文件中   然后在html文件去引用这个js文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<!-- <button onclick="doAjaxGet()">doAjaxGet</button> -->
<button onclick="doAjaxGetRequest()">doAjaxGet</button>
<button onclick="doAjaxPostRequest()">doAjaxPost</button>
</div>

<div id="result"></div>

<!-- 引入js文件 -->
<script type="text/javascript" src="/js/ajax.js"></script>  
<script type="text/javascript">
function doAjaxGetRequest() {
//定义请求url
var url = "/ajax/doAjaxGetRequest1";
//定义请求参数
var params = "key=A";
//发送ajax请求
doAjaxGet(url, params, function(result) {
var div = document.getElementById("result");
div.innerHTML = result;
});
}
function doAjaxPostRequest() {
//定义请求url
var url = "/ajax/doAjaxPostRequest";
//定义请求参数
var params = "key=C&value=300";
//发送ajax请求
doAjaxPost(url, params, function(result) {
alert(result)
});
}
</script>
</body>
</html>

Ajax技术基本应用

 

还可以以对象方式访问

html中代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
<!-- <button onclick="doAjaxGet()">doAjaxGet</button> -->
<button onclick="doAjaxGetRequest()">doAjaxGet</button>
<button onclick="doAjaxPostRequest()">doAjaxPost</button>
</div>

<div id="result"></div>
<script type="text/javascript" src="/js/ajaxfs.js"></script>
<script type="text/javascript">
function doAjaxGetRequest() {
//定义请求url
var url = "/ajax/doAjaxGetRequest1";
//定义请求参数
var params = "key=A";
//发送ajax请求
Ajax.doAjaxGet(url, params, function(result) {
var div = document.getElementById("result");
div.innerHTML = result;
});
}
function doAjaxPostRequest() {
//定义请求url
var url = "/ajax/doAjaxPostRequest";
//定义请求参数
var params = "key=C&value=300";
//发送ajax请求
Ajax.doAjaxPost(url, params, function(result) {
alert(result)
});
}
</script>
</body>
</html>

 --------------------------------------------------------------------------------------

js中代码

(function(){
var ajax = function(){}
ajax.prototype={
doAjaxGet:function (url, params, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// console.log(xhr.responseText);
callback(xhr.responseText);
}
}
//xhr.open("GET","http://localhost:8080/ajax/doAjaxGetRequest",true);
xhr.open("GET",url+"?"+params,true);
xhr.send(null);
},
doAjaxPost:function (url, params, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// console.log(xhr.responseText);
callback(xhr.responseText);
}
}
//xhr.open("GET","http://localhost:8080/ajax/doAjaxGetRequest",true);
xhr.open("POST",url,true);
xhr.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
xhr.send(params);
}
}
window.Ajax=new ajax;
})()

 

Ajax技术基本应用

 

 

Ajax技术基本应用

上一篇:(四)webpack打包图片资源


下一篇:在手机上部署运行scrapyd服务