你的位置:首页 > Java教程

[Java教程]Ajax基本概念和原理


什么是Ajax

Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

Ajax的全称是Asynchronous JavaScript and

  • HTML/XHTML——主要的内容表示语言。
  • CSS——为XHTML提供文本格式定义。
  • DOM——对已载入的页面进行动态更新。
  • XSLT——将
  • JavaScript——用来编写Ajax引擎的脚本语言。

实际上,在Ajax解决方案中这些技术都是可用的,不过只有三种是必须的:HTML/XHTML、DOM以及JavaScript。

当需要异步与服务器交换数据时,需要

  • onreadystatechange——每次状态改变所触发事件的事件处理程序。
  • responseText——从服务器进程返回数据的字符串形式。
  • response
  • status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
  • status Text——伴随状态码的字符串信息。
  • readyState——对象状态值。对象状态值有以下几个:
    • 0 - (未初始化)还没有调用send()方法
    • 1 - (载入)已调用send()方法,正在发送请求
    • 2 - (载入完成)send()方法执行完成
    • 3 - (交互)正在解析响应内容
    • 4 - (完成)响应内容解析完成,可以在客户端调用了

对于readyState的状态值,其中“0”状态是在定义后自动具有的状态值,而对于成功访问的状态(得到信息)我们大多数采用“4”进行判断。

Ajax的核心就是是JavaScript对象

XHR对象由IE5率先引入,在IE5中XHR对象是通过MS

1 var 2 if (window.3  // code for IE7+, Firefox, Chrome, Opera, Safari4  new 5 } else {6  // code for IE6, IE57  new ActiveXObject("Microsoft.);8 }


1 true);2 

对于open方法,有几点需要注意:

  1. URL是相对于当前页面的路径,也可以似乎用绝对路径。
  2. open方法不会向服务器发送真正请求,它相当于初始化请求并准备发送。
  3. 只能向同一个域中使用相同协议和端口的URL发送请求,否则会因为安全原因报错。

真正能够向服务器发送请求需要调用send方法,并仅在POST请求可以传入参数,不需要则发送null,在调用send方法之后请求被发往服务器。  

请求发往服务器,服务器根据请求生成响应(Response),传回给XHR对象,在收到响应后相应数据会填充到XHR对象的属性,有四个相关属性会被填充:

  • responseText——从服务器进程返回数据的字符串形式。
  • response
  • status——从服务器返回的数字代码,如404(未找到)和200(已就绪)。
  • status Text——伴随状态码的字符串信息。

在收到响应后第一步是检查响应状态,确保响应是否成功返回(状态为200)。

1 xhr.open('get','default.aspx,false'); //准备同步请求2 xhr.send();3 if(xhr.status>=200 && xhr.status<300 || xhr.status==304){4   //do something5 }else{6    //error handler7 }

上面代码在发送同步请求的时候没问题,只有得到响应后才会执行检查status语句,但是在异步请求时,JavaScript会继续执行,不等生成响应就检查状态码,这样我们不能保证检查状态码语句是在得到响应后执行(实际上也几乎不可能,服务器再快一个HTTP请求也不会快过一条JavaScript执行数度),这时候我们可以检查XHR对象的readyState属性,该属性表示请求/响应过程中的当前活动阶段,每当readyState值改变的时候都会触发一次onreadystatechange事件。

我们可以利用这个事件检查每次readyState变化的值,当为4的时候表示所有数据准备就绪,有一点我们需要注意:必须在open方法之前指定onreadtstatechange事件处理程序。

1 function(){2  if (){3   document.getElementById("myDiv").innerHTML=4   }5  }6 true);7 

GET 还是 POST?

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

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

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

一个简单的 GET 请求:

true);

在上面的例子中,可能得到的是缓存的结果。

为了避免这种情况,向 URL 添加一个唯一的 ID:

true);

如果希望通过 GET 方法发送信息,向 URL 添加信息:

true);

一个简单 POST 请求:

true);

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

true);"Content-type","application/x-www-form-urlencoded");"fname=Henry&lname=Ford");

open() 方法的 url 参数是服务器上文件的地址:

true);

该文件可以是任何类型的文件,比如 .txt 和 .

异步 - True 或 False?

true);

对于 web 开发人员来说,发送异步请求是一个巨大的进步。很多在服务器执行的任务都相当费时。AJAX 出现之前,这可能会引起应用程序挂起或停止。

通过 AJAX,JavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本
  • 当响应就绪后对响应进行处理

当使用 async=true 时,规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

function(){ if (){  document.getElementById("myDiv").innerHTML="GET","ajax_info.txt",true);