概念:

首先AJAX不只是一个特定的客户端技术,更应算是一种技巧。Ajax技术的核心操作是用XmlHttpRequest(下称XHR)对象进行异步数据处理。

所谓异步,即通过 AJAX,JavaScript 无需等待服务器的响应,而是:

Ø  在等待服务器响应时执行其他脚本

Ø  当响应就绪后对响应进行处理

作用:

在AJAX技术中,主要利用JavaScript的XHR对象来传递用户界面上的数据到服务端并返回结果。XHR对象用来响应通过HTTP传递的数据,一旦数据返回到客户端就可以立刻使用DOM(是页面的一个完全面向对象的表示)技术来操作数据并显示到网页上。

AJAX的最终目的是创建更好更快以及交互性更强的 Web 应用程序。

与传统的web 请求/相应 模式相比:

优点:传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面;AJAX应用可以仅向服务器发送并取回必需的数据,通过在后台与服务器进行少量数据交换,实现网页的异步更新。避免了在网络上发送那些没有改变过的信息。就是能在不更新整个页面的前提下维护数据,就是允许浏览器与服务器进行通信而无需刷新页面,这使得Web应用程序能够更为迅捷地回应用户动作。

缺点:传统的遵循请求/响应模式的应用,对于每个请求都会加载整个页面,所以,原来查看的页面都会放到浏览器的历史栈中。而Ajax用XHR对象做出的请求不会记录在浏览器的历史中。如果你的用户习惯使用浏览器的“后退”按钮在Web应用中进行导航,就可能会产生问题。

通过AJAX与服务器的交互的过程:

大体上一般的交互过程只需要简单的三步即可完成

下面谈一下标准的AJAX交互过程:

1.    一个客户端事件触发一个Ajax事件,例如

<input type="text" id="txtEmail" onblur=“showHint(str)”/>

2.   创建XHR对象的一个实例,使用open()方法建立调用,并设置URL以及所希望的HTTP方法(get或post)。请求实际上通过一个send()方法调用触发

  1. <script type="text/javascript">
  2. function showHint(str)
  3. {
  4. var xmlhttp;
  5. if (str.length==0)
  6. {
  7. document.getElementById("txtHint").innerHTML="";
  8. return;
  9. }
  10.  
  11. //创建 XMLHttpRequest 对象
  12. if (window.XMLHttpRequest)
  13. {// 对于 IE7+, Firefox, Chrome, Opera, Safari
  14. xmlhttp=new XMLHttpRequest();
  15. }
  16. else
  17. {// 对于 IE6, IE5
  18. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  19. }
  20.  
  21. //当服务器状态改变时执行函数
  22. xmlhttp.onreadystatechange=callback;
  23.  
  24. //把请求发送到服务器上的文件
  25. xmlhttp.open("GET","/ajax/gethint.asp?q="+str,true);
  26. xmlhttp.send();
  27. }
  28. //回调函数
  29. function callback()
  30. {
  31. //响应就绪时
  32. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  33. {
  34. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  35. }
  36. }
  37. </script>

3. 向服务器做出请求,可能调用servlet、CGI脚本或任何服务器端技术

4. 服务器可以做你想做的事情,包括访问数据库,甚至访问另一个系统

5. 请求返回到浏览器。Content-Type设置为text/xml的XHR对象只能处理text/html类型的结果。可以设置另外一些首部,使得浏览器不会在本地缓存结果:

response.setHeader(“Cache-Control”,”no-cache”);

response.setHeader(“Pragma”,”no-cache”);

6. 我们可以在将XHR对象配置为处理返回时调用callback()函数(xmlHttp.onreadystatechange=callback;)。该函数会检查XHR对象的readyState属性,然后查看服务器返回的状态码。如果一切正常,callback()函数就会在客户端做些相应的操作

  1. //回调函数
  2.  
  3. function callback()
  4. {
  5. //响应就绪时
  6. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  7. {
  8. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  9. }
  10. }

总结:

(1)    交互过程所用到的XHR对象的主要属性方法

(2)Ajax的灵活性在于动态改变局部资料量,因此小量传输资料才能达到最高效益。如果一大张资料表都要透过DOM的操作来改

变,不如就由后端程式与资料库来操作,效益更高。

(3)当Ajax载入资料量大时,有时会让使用者产生错觉,不确定刚刚按下的按扭是否发生作用。因此开发人员必须设计适当的提

示,让使用者了解目前程式的执行状况。

(4)与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

如下情况则须使用POST方式:

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

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

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

Ajax概述及浅谈其与服务器的交互过程的更多相关文章

  1. 浅谈flask源码之请求过程

    更新时间:2018年07月26日 09:51:36   作者:Dear.   我要评论   这篇文章主要介绍了浅谈flask源码之请求过程,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...

  2. 浅谈 iOS 与 H5 的交互- JavaScriptCore 框架

    前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCo ...

  3. 浅谈Linux ftp服务器相关配置

    首先我们需要在Linux系统下安装FTP服务器  Ubuntu sudo apt-get install.......  centos yun....... 然后,我们要配置vsftpd.conf文件 ...

  4. 浅谈Facebook的服务器架构(组图)

    导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...

  5. 浅谈Facebook的服务器架构

    导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...

  6. ECMAScript概述及浅谈const,let与块级作用域

    ECMAScript可以看作javascript的标准规范,实际上javascript是ECMAScript的一门脚本语言,ECMAScript只提供了最基本的语言JavaScript对ECMAScr ...

  7. 浅谈移动端 View 的显示过程

    作者:个推安卓开发工程师 一七 随着科技的发展,各种移动端早已成为人们日常生活中不可或缺的部分,人们使用移动端产品工作.社交.娱乐……移动端界面的流畅性已经成为影响用户体验的重要因素之一.那么你是否思 ...

  8. 浅谈mongodb与Python的交互

    1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 导入pymon ...

  9. 浅谈JS之AJAX

    0x00:什么是Ajax? Ajax是Asynchronous Javascript And Xml 的缩写(异步javascript及xml),Ajax是使用javascript在浏览器后台操作HT ...

随机推荐

  1. SQL Server存储过程和游标有关实例以及相关网址

    内含游标的存储过程实例 第一种写法 GO BEGIN IF (object_id('PT_FAULT_REPORT', 'P') is not null) drop proc PT_FAULT_REP ...

  2. SqlServer数据类型、C#SqlDbType对应关系及转换

    { { } } { SqlDbType dbType = SqlDbType.Variant; { dbType = SqlDbType.Int; dbType = SqlDbType.VarChar ...

  3. tomcat部署java项目

    tomcat部署java项目 1.启动tomcat 进入到tomcat安装目录下的bin #cd /opt/tomcat/bin #./startup.sh // 执行重启命令 2.重建一个新目录导入 ...

  4. Spring总结——控制反转,注入(配置和注解两种方式)

    一.Spring的容器: 1.什么是控制反转:传统的方法,当某个java对象A需要调用对象B时,是由调用者(对象A)通过new关键字来创建对象B的(也可以说类A依赖类B),而在Spring中,则是由s ...

  5. (4)事件处理——(3)代码执行的顺序(Timing of code execution)

    In Chapter 1, Getting Started, we noted that $(document).ready()was jQuery's primary way to perform ...

  6. easyui给select控件绑定change事件

    一般的做法是使用jQuery来绑定,例如: $("#id").change(function(){ alert("change事件绑定"); }); 当给sel ...

  7. JAVA并发,经典死锁案例-哲学家就餐

    转自:http://blog.csdn.net/tayanxunhua/article/details/38691005 死锁经典案例:哲学家就餐. 这个案例会导致死锁. 通过修改<Java编程 ...

  8. 59 pages的Delphi源码

    http://www.codesc.net/source/list_10_59.shtml

  9. Android程序报错 Connection refused 处理

    在用Android测试JSON数据解析的时候,报了这样一个异常: java.net.ConnectException: localhost/ - Connection refused 原来模拟器默认把 ...

  10. easyui-layout中的收缩层无法显示标题问题解决

    先看问题描述效果图片: 如上,我的查询条件是放在layout下面的一个可收缩层中,初始是收缩的,title显示不出来的话对使用者很不方便,代码如下: <div id="__MODULE ...