Ajax是"Asynchronous JavaScript And XML"的缩写(即:异步的JavaScript和XML),是一种实现无页面刷新获取服务器数据的混合技术,Ajax这个概念的最早提出者是Jesse James Garrett。我们知道,互联网最主要的功能在于"资源交换",当初发明互联网的科学家们也是基于这个动机。虽然在互联网中"资源交换"的主体都是计算机。但为了方便交流,我们通常将获取资源的一方称为客户端(主要的工具是浏览器),而将派发资源的一方称为服务端。

在AJAX技术出现之前,如果浏览器需要从服务器请求资源,其交互模式为"客户端发出请求 -> 服务端接收请求并返回相应HTML文档 -> 页面刷新,客户端加载新的HTML文档"。确实,这种交互模式十分简洁明了,而且非常符合人的直觉,对于那时游走于互联网中的极客而言,也确实够用了。但是随着时代的进步,互联网渐渐不只是极客们的娱乐场,越来越多商业化网站的出现,使互联网不再局限于满足人们"资源交换"的需求,人们开始期待能够在互联网中获得更好的"使用体验",而随着用户点击不断刷新页面的交互方式显然很难讨人喜欢。

AJAX技术的问世,不仅通过阻止浏览器接受响应时刷新页面提升了互联网用户的使用体验,还使开发者能够以更加微观的视角重新思考互联网应用的构建,从此,开发者将在"数据"层面而不是"资源"层面以更高的自由 度构建网站和Web应用。

有没有办法在页面数据变动时,只向服务器请求新的数据,并且在阻止页面刷新的情况下,动态的替换页面中展示的数据呢? -- 答案正是"AJAX"。

再试想这样一种情景,当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数据发生了变化,而此时服务器却要将重绘的整个页面再返回给浏览器加载,这显然有悖于程序员的"DRY"原则,而且明明只是一些数据的变化却迫使服务器要返回整个HTML文档,这本身也会给网络带宽带来不必要的开销。

经典Web应用程序模型的工作方式如下:

用户界面中的大多数用户操作都会将HTTP请求触发返回Web服务器。服务器进行一些处理-检索数据、处理数字、与传统系统对话,然后向客户端返回HTML页面。这种方法具有很多技术意义,但是它并不能为用户带来出色的体验。虽然服务器正在做它应该做的事情,但是在服务器工作时用户只能等待它完成。

图1  传统Web应用与使用AJAX的Web应用

显然,如果我们重新设计Web应用程序,我们就不会让用户等待。我们通过在用户和服务器之间引入中介(Ajax引擎),Ajax应用程序消除了Web上交互的启动-停止-启动-停止性质,浏览器不是加载网页,而是在会话开始时加载一个Ajax引擎-用JavaScript编写。该引擎负责呈现用户看到的界面并代表用户与服务器通信。Ajax引擎允许用户与应用程序的交互异步进行-与服务器的通信无关。因此,用户就不会在盯着空白的浏览器窗口和等待载入的图标或者等待服务器处理结束了。

同步的过程只有允许有一个进程在执行,比如服务端在处理数据的时候,那么客户端不能进行任何操作,处于一个阻塞的一个状态。

使用ajax的程序,服务端在处理数据的时候,客户端浏览器依然可以执行其他的操作,并没有阻塞状态,也就是一个时间段内可以有多个进程在执行。

图2  传统Web应用运行流程

图3  使用AJAX的Web应用运行流程

IT兄弟连 JavaWeb教程 AJAX定义以及解决的问题的更多相关文章

  1. IT兄弟连 JavaWeb教程 AJAX以及JSON字符串经典案例

    案例需求:客户端发送AJAX请求服务器端获取用户信息的数据. 案例实现: 在服务器端要将Java对象转换成JSON字符串,如果使用拼接JSON字符串的方式非常繁琐,并且非常容易出错,所以一般会借助第三 ...

  2. IT兄弟连 JavaWeb教程 AJAX常见问题

    1  中文乱码问题 ●  POST提交乱码 乱码原因:所有浏览器对Ajax请求参数都使用UTF-8进行编码,而服务器默认使用ISO-8859-1去解码,所以产生乱码. 解决方法:在服务器接收请求参数前 ...

  3. IT兄弟连 JavaWeb教程 AJAX的技术构成

    Ajax并不是新的技术,而是之前技术的整合,其中包括JavaScript.HTML.CSS.DOM.XMLHttpRequest.XML和JSON是构成Ajax技术体系技术基石. JavaScript ...

  4. IT兄弟连 JavaWeb教程 AJAX中参数传递问题

    使用Ajax发送GET请求并需要传递参数时,直接在URL地址后拼接参数,格式如下: xhr.open('get','请求路径?参数名1=参数值1&参数名2=参数值2...',true); 使用 ...

  5. IT兄弟连 JavaWeb教程 JSP定义

    JSP页面是指扩展名为.jsp的文件,在一个JSP页面中,可以包括指令标识.HTML代码.JavaScript代码.嵌入的Java代码.注释和JSP动作标识等内容.但这些内容并不是一个JSP页面所必须 ...

  6. IT兄弟连 JavaWeb教程 JSTL定义

    JSTL标签库实际上包含5个不同的标签库.JSTL1.1规范为这些标签库的URI和前缀做了预定,参见表7.3. 表3  JSTL标签库

  7. IT兄弟连 JavaWeb教程 Servlet定义以及环境配置 BS程序和CS程序

    随着网络技术的不断发展,单机的软件程序已难以满足网络计算机的需求.为此,各种各样的网络程序开发体系结构应运而生.其中,运用最多的网络应用程序开发体系结构可以分为两种,一种是基于客户端/服务器的C/S结 ...

  8. IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典案例

    案例需求:编写用户登陆页面的验证码模块,在用户进行登陆时,输入验证码后不需要点击提交按钮,使用AJAX异步地向服务器发送验证验证码的请求.如果验证码正确,可以点击提交按钮,如果验证码输入错误,提示用户 ...

  9. IT兄弟连 JavaWeb教程 jQuery对AJAX的支持经典面试题

    1.简述对Ajax的理解 AJAX是Asynchronous JavaScript and Xml异步的JavaScript和Xml.它一种用来改善用户体验的技术其实质是使用XMLHttpReques ...

随机推荐

  1. [2018-12-07]用ABP入门DDD

    前言 ABP框架一直以来都是用DDD(领域驱动设计)作为宣传点之一.但是用过ABP的人都知道,ABP并不是一个严格遵循DDD的开发框架,又或者说,它并没有完整实现DDD的所有概念. 但是反过来说,认真 ...

  2. GDB调试core文件(3)

    列出一些常见问题: 一,如何使用core文件 使用core文件 在core文件所在目录下键入: gdb -c core 它会启动GNU的调试器,来调试core文件,并且会显示生成此core文件的程序名 ...

  3. 深入理解SP、LR和PC

    深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益. 1.堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式.非异常模 ...

  4. matlab的数组

    1.定义:同一类型的元素的集合. 2.生成:用[]创建,元素之间用逗号或者空格隔开. 第一例: >>a=[1,2,3,4] a = 1 2 3 4 注意,取矩阵的某几列,是这样a(:,2: ...

  5. 1072 Gas Station (30)(30 分)

    A gas station has to be built at such a location that the minimum distance between the station and a ...

  6. UVA1389 Hard Life[二分答案+最小割]

    我真菜啊←地址 求最大密度子图方案.密度=边数/点数 假设E,V为最大密度子图的边数点数.则$\forall \rho$有$\rho \leqslant \frac{E}{V}$即$E- \rho V ...

  7. AIM Tech Round 4 (Div. 2)

    A题 分析:暴力 #include "iostream" #include "cstdio" #include "cstring" #inc ...

  8. poj3585树最大流——换根法

    题目:http://poj.org/problem?id=3585 二次扫描与换根法,一次dfs求出以某个节点为根的相关值,再dfs遍历一遍树,根据之前的值换根取最大值为答案. 代码如下: #incl ...

  9. DataGrid 显示选中的item

    Datagrid或者listview 中想要把相应的项 滚动到当前可见的位置, 必须满足2个条件: 1) 必须去掉虚拟化      VirtualizingStackPanel.IsVirtualiz ...

  10. C# 获取Console的输入和输出 数据 (异步)

    using System ; using System .Diagnostics; using System .IO;   class Program {     static void Main() ...