说到ajax大家一定不陌生,但是真要具体说说它是什么?估计给出完整定义的人应该不多。
w3c上给ajax的具体定义为:
ajax = asynchronous javascript and xml(异步的 javascript 和 xml)。
也就是说ajax 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。
ajax 是一种用于创建快速动态网页的技术。
通过在后台与服务器进行少量数据交换,ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
传统的网页(不使用 ajax)如果需要更新内容,必需重载整个网页面。
当然我们在学习ajax之前必须得先对下面的知识有基本的了解:
html / xhtml css javascript / dom
xmlhttprequest 是 ajax 的基础。
所有现代浏览器均支持 xmlhttprequest 对象(ie5 和 ie6 使用 activexobject)。所有现代浏览器(ie7+、firefox、chrome、safari 以及 opera)均内建 xmlhttprequest 对象。
xmlhttprequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
具体创建xmlhttprequest 的代码如下:
//为了应对所有的现代浏览器,包括 ie5 和 ie6,请检查浏览器是否支持 xmlhttprequest 对象。如果支持,则创建 xmlhttprequest 对象。如果不支持,则创建 activexobject var xmlhttp;if (window.xmlhttprequest) {// code for ie7+, firefox, chrome, opera, safari xmlhttp = new xmlhttprequest();}else {// code for ie6, ie5 老版本的 internet explorer (ie5 和 ie6)使用 activex 对象 xmlhttp = new activexobject(microsoft.xmlhttp);}
再介绍xmlhttprequest 对象用于和服务器交换数据之前,我们先简单了解一下get和post 方法的利弊,以方便后续开发时选择更加适合的请求方式。
与 post 相比,get 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 post 请求:
无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(post 没有数据量限制) 发送包含未知字符的用户输入时,post 比 get 更稳定也更可靠 xmlhttprequest 与服务器交换数据主要是通过open和send方法,其中如果是open方法中使用的是get方式的话,那么send方法则无需传递任何参数。如果是使用的post方式的话,那么send方法中传递的则是类似于querystring的字符串。
下面简单介绍一下几个主要的方法:
方法 描述
open(method,url,async) 规定请求的类型、url 以及是否异步处理请求。
method:请求的类型;get 或 post url:文件在服务器上的位置 async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
string:仅用于 post 请求
setrequestheader(header,value) 向请求添加 http 头。
header: 规定头的名称 value: 规定头的值
事实上,open方法中的async参数如果设计为false的话,那么发送的请求则跟传统的方式没有区别,也就是说必须等待服务器端数据回来之后才能接着进行下步操作。javascript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。所以我们不推荐使用 async=false。
当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:
xmlhttp.open(get, test1.txt, false);xmlhttp.send();document.getelementbyid(mydiv).innerhtml = xmlhttp.responsetext;
当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:
xmlhttp.onreadystatechange = function () { if (xmlhttp.readystate == 4 && xmlhttp.status == 200) { document.getelementbyid(mydiv).innerhtml = xmlhttp.responsetext; }}xmlhttp.open(get, test1.txt, true);xmlhttp.send();
大家注意当使用async=true 时,它的返回值当中有两个重要的属性,那便是responsetext 和responsexml 。其中responsetext 获得字符串形式的响应数据而responsexml 获得 xml 形式的响应数据。如果来自服务器的响应并非 xml,请使用 responsetext 属性。如果来自服务器的响应是 xml,而且需要作为 xml 对象进行解析,请使用 responsexml 属性。
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readystate 等于 4 且状态为 200 时,表示响应已就绪
当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readystate 改变时,就会触发 onreadystatechange 事件。
readystate 属性存有 xmlhttprequest 的状态信息。
下面是 xmlhttprequest 对象的三个重要的属性:
属性 描述
onreadystatechange 存储函数(或函数名),每当 readystate 属性改变时,就会调用该函数。
readystate 存有 xmlhttprequest 的状态。从 0 到 4 发生变化。
0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪
status 200: ok
404: 未找到页面
下面以一个简单的demo温习一下上述介绍的基础知识
click