在我们平时的开发过程中,经常使用到Ajax数据交互,相信有很大一部分人会使用,可能没太详细了解过Ajax的工作原理。下面我们一起看一下吧!

( 一 ) 什么是Ajax

  Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。
  Ajax = 异步 JavaScript 和 XML(标准通用标记语言的子集)。
  Ajax 是一种用于创建快速动态网页的技术。
  Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
  通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
 
( 二 ) Ajax包含技术
  1. 使用CSS和XHTML来表示。 
  2. 使用DOM模型来交互和动态显示。 
  3. 使用XMLHttpRequest来和服务器进行异步通信。 
  4. 使用javascript来绑定和调用。
 
( 三 ) Ajax原理和XmlHttpRequest对象
  一张图解释其原理......
  
 
  XMLHttpRequest对象,它扮演的角色相当于小明,使得浏览器可以发出HTTP请求与接收HTTP响应。浏览器接着做其他事情,等收到XHR返回来的数据再渲染页面。
  详细如下图:
  
 
  XMLHttpRequest这个对象的属性和方法:
  
   
 
( 四 ) Ajax使用
  1. 创建XMLHttpRequest对象
  1. var xmlhttp;
  2. if (window.XMLHttpRequest)
  3. {
  4. // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
  5. xmlhttp=new XMLHttpRequest();
  6. }
  7. else
  8. {
  9. // IE6, IE5 浏览器执行代码
  10. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  11. }

  2. 向服务器发送请求

    使用 XMLHttpRequest 对象的 open() 和 send() 方法:

  1. xmlhttp.open("GET","ajax_info.txt",true);
  2. xmlhttp.send();

      

    

    请求类型:与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

      然而,在以下情况中,请使用 POST 请求:

        : 无法使用缓存文件(更新服务器上的文件或数据库)

        : 向服务器发送大量数据(POST 没有数据量限制)

        : 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

  3. 服务器相应

    使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

    ( a ) responseText 属性(获得字符串形式的响应数据。)

      实例:      

  1. document.getElementById("Divs").innerHTML=xmlhttp.responseText;

    

    ( b )responseXML 属性(获得 XML 形式的响应数据)

      实例:

  1. xmlDoc=xmlhttp.responseXML;
  2. txt="";
  3. x=xmlDoc.getElementsByTagName("ARTIST");
  4. for (i=0;i<x.length;i++)
  5. {
  6. txt=txt + x[i].childNodes[0].nodeValue + "<br>";
  7. }
  8. document.getElementById("Divs").innerHTML=txt;

  4.XMLHttpRequest readyState状态

    XMLHttpRequest 对象的三个重要的属性:

    

    实例:

  1. xmlhttp.onreadystatechange=function()
  2. {
  3. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  4. {
  5. document.getElementById("Divs").innerHTML=xmlhttp.responseText;
  6. }
  7. }

    注意: onreadystatechange 事件被触发 4 次(0 - 4), 分别是: 0-1、1-2、2-3、3-4,对应着 readyState 的每个变化。

    日常笔记:⚠️⚠️⚠️

      xmlhttp.readyState的值及解释:

        0:请求未初始化(还没有调用 open())。

        1:请求已经建立,但是还没有发送(还没有调用 send())。

        2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。

        3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。

        4:响应已完成;您可以获取并使用服务器的响应了。

      xmlhttp.status的值及解释:

        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版本

        1xx:信息响应类,表示接收到请求并且继续处理

        2xx:处理成功响应类,表示动作被成功接收、理解和接受

        3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

        4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

        5xx:服务端错误,服务器不能正确执行一个正确的请求

        xmlhttp.readyState==4 && xmlhttp.status==200的解释:请求完成并且成功返回

  

 
( 五 ) Ajax优缺点
  优点:

    1. 无刷新更新数据。 
      AJAX最大优点就是能在不刷新整个页面的前提下与服务器通信维护数据。这使得Web应用程序更为迅捷地响应用户交互,并避免了在网络上发送那些没有改变的信息,减少用户等待时间,带来非常好的用户体验。

    2. 异步与服务器通信。 
      AJAX使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。优化了Browser和Server之间的沟通,减少不必要的数据传输、时间及降低网络上数据流量。

    3. 前端和后端负载平衡。 
      AJAX可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,AJAX的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担,提升站点性能。

    4. 基于标准被广泛支持。 
      AJAX基于标准化的并被广泛支持的技术,不需要下载浏览器插件或者小程序,但需要客户允许JavaScript在浏览器上执行。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。

    5. 界面与应用分离。 
      Ajax使WEB中的界面与应用分离(也可以说是数据与呈现分离),有利于分工合作、减少非技术人员对页面的修改造成的WEB应用程序错误、提高效率、也更加适用于现在的发布系统。

  缺点:

    1. AJAX干掉了Back和History功能,即对浏览器机制的破坏。 
      在动态更新页面的情况下,用户无法回到前一个页面状态,因为浏览器仅能记忆历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常会希望单击后退按钮能够取消他们的前一次操作,但是在Ajax应用程序中,这将无法实现。

    2. AJAX的安全问题。 
      AJAX技术给用户带来很好的用户体验的同时也对IT企业带来了新的安全威胁,Ajax技术就如同对企业数据建立了一个直接通道。这使得开发者在不经意间会暴露比以前更多的数据和服务器逻辑。Ajax的逻辑可以对客户端的安全扫描技术隐藏起来,允许黑客从远端服务器上建立新的攻击。还有Ajax也难以避免一些已知的安全弱点,诸如跨站点脚步攻击、SQL注入攻击和基于Credentials的安全漏洞等等。

    3. 对搜索引擎支持较弱。 
      对搜索引擎的支持比较弱。如果使用不当,AJAX会增大网络数据的流量,从而降低整个系统的性能。

    4. 破坏程序的异常处理机制。 
      至少从目前看来,像Ajax.dll,Ajaxpro.dll这些Ajax框架是会破坏程序的异常机制的。关于这个问题,曾在开发过程中遇到过,但是查了一下网上几乎没有相关的介绍。后来做了一次试验,分别采用Ajax和传统的form提交的模式来删除一条数据……给我们的调试带来了很大的困难。

    5. 违背URL和资源定位的初衷。 
例如,我给你一个URL地址,如果采用了Ajax技术,也许你在该URL地址下面看到的和我在这个URL地址下看到的内容是不同的。这个和资源定位的初衷是相背离的。

    6. AJAX不能很好支持移动设备。 
      一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax,比如说我们在手机的浏览器上打开采用Ajax技术的网站时,它目前是不支持的。

    7. 客户端过肥,太多客户端代码造成开发上的成本。 
      编写复杂、容易出错 ;冗余代码比较多(层层包含js文件是AJAX的通病,再加上以往的很多服务端代码现在放到了客户端);破坏了Web的原有标准。

 

AJAX入门介绍的更多相关文章

  1. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  2. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

  3. ajax入门之建立XHR对象 (1)

    ajax入门之建立XHR对象 今天帮朋友写了一个简单的ajax的demo,发现了一些东西,决定写一篇文章记录一下,避免以后挖坑. 创建XMLHttpRequest 通常 function create ...

  4. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  5. ASP.NET AJAX入门系列

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  6. 系列文章--ASP.NET之AJAX入门教程

    ASP.NET AJAX入门系列将会写关于ASP.NET AJAX一些控件的使用方法以及基础知识,其中部分文章为原创,也有一些文章是直接翻译自官方文档,本部分内容会不断更新. 目录 ASP.NET A ...

  7. AJAX入门---点滴的积累

    AJAX入门---点滴的积累 每次学习完一个内容总会写上几句话总结一下学习的内容.这不刚看完王兴魁老师讲的AJAX核心技术.如今回想梳理一下. 这套视频的内容不多,简单的解说了XMLHttpReque ...

  8. JavaEE的ajax入门

    JavaEE的ajax入门 代码下载 链接:https://pan.baidu.com/s/1pb_sdSmV9Ncs6UIz3q2ztg 提取码:fgx6 复制这段内容后打开百度网盘手机App,操作 ...

  9. C# BackgroundWorker组件学习入门介绍

    C# BackgroundWorker组件学习入门介绍 一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能 ...

随机推荐

  1. 【原创】基于.NET的轻量级高性能 ORM - TZM.XFramework 之优雅增删改

    [前言] 大家好,我是TANZAME.出乎意料的,我们在立冬的前一天又见面了,天气慢慢转凉,朋友们注意添衣保暖,愉快撸码.距离 TZM.XFramework 的首秀已数月有余,期间收到不少朋友的鼓励. ...

  2. 第三十九章 POSIX信号量与互斥锁

    POSIX信号量相关函数 sem_open 功能: initialize and open a named semaphore 原型: sem_t *sem_open(const char *name ...

  3. NOIP模(ka)拟(chang)测试30 考试报告

    应得分:300 实得分:210 毒瘤卡常出题人,卡掉90分! T1 Return 开个副本数组sort一下,unique去重就可以啦.时间复杂度$ O(nlog2(n)) $ T2 One 其实就是约 ...

  4. 近期学习es6后对变量提升及let和const的一点思考

    1.变量提升:(创建->初始化)-->赋值-->修改 就是说,以var声明的变量,它的声明会被提升到当前作用域的顶端(注意是变量声明提升,变量的赋值没有提升) //在if语句中也会提 ...

  5. [ZJOI2013]K大数查询——整体二分

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是: 1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c 2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少. ...

  6. Go 基础学习笔记(3)| 第一个程序 “helloworld”

       //第一个程序总要说的清楚才行.   //建议先运行起第一个程序实践后,再看后面的具体解答 一.helloworld 编写运行 1.编写源程序,在 ~ /hello/src  编写hello.g ...

  7. python——时间模块

    格式化时间字符串 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(0000-9999) %m 月份(01-12) %d 月内的一天(0-31) %H 24小时制的小时数(0-23) %I ...

  8. servlet三大组件

    servlet大致可以分为三个:简单servlet.过滤servlet.监听servlet servlet: servlet的创建 创建一个类并实现Servlet接口. 重写service方法. 在服 ...

  9. etcd-operator快速入门完全教程

    Operator是指一类基于Kubernetes自定义资源对象(CRD)和控制器(Controller)的云原生拓展服务,其中CRD定义了每个operator所创建和管理的自定义资源对象,Contro ...

  10. pat 1041 Be Unique(20 分)

    1041 Be Unique(20 分) Being unique is so important to people on Mars that even their lottery is desig ...