首页 > 代码库 > AJAX入手

AJAX入手

AJAX = Asynchronous JavaScript and XML(异步的javaScript和XML)

它是一种使用现有标准的新方法

与服务器交换数据并更新部分网页的艺术,在不重新加载整个页的情况下。


一个简单的DEMO

<html>
<body>

<div id="div1"><h2>change this text</h2></div>
<button type="button1" onclick="loadXMLDoc()">Change Content</button>
</body>
</html>

<head>
<script type="text/javascript">
function loadXMLDoc()
{
.... AJAX script goes here ...
}
</script>
</head>

XMLHttpRequest是AJAX的基础

所有现代浏览器均支持XMLHttpRequest对象(IE7+、Firefox、Chrome、Safari 以及 Opera,IE5和IE6使用ActiveXObject)

XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


创建XMLHttpRequest对象的语法:

variable=new XMLHttpRequest();

IE5和IE6时创建语法:

variable=new ActiveXObject("Microsoft.XMLHTTP");

为了应对所有的现代浏览器的创建语法:

var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

向服务器发送请求

xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();

open(method,url,async)

method:请求的类型;GET或POST

url:文件在服务器上的位置

async:true(异步)或false(同步)


send(string) 将请求发送到服务器

string:仅用于POST请求


GET更简单也更快,并具在大部分情况下都能用。

POST的使用条件:

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

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

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


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

xmlhttp.open("POST","ajax_test.asp",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Bill&lname=Gates");

setRequestHeader(header,value)

header:规定的名称

value:规定头的值


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 = false

xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

获得来自服务器的响应,使用XMLHttpRequest对象的responseText或responseXML属性。

responseText:返回字符串形式的响应

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
responseXML:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
  {
  txt=txt + x[i].childNodes[0].nodeValue + "<br />";
  }
document.getElementById("myDiv").innerHTML=txt;

onreadystatechange事件

onreadystatechange 存储函数(或函数名),每当readyState属性改变时,就会调用该函数。

readyState 存有XMLHttpRequest的状态。从0到4发生变化。

0:请求未初始化

1:服务器连接已建立

2:请求已接收

3:请求处理中

4:请求已完成,且响应已就绪

status 200:“OK”

404:未找到页面

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }


注释:onreadystatechange事件被触发5次(0-4),对应着readystate的每个变化


callback函数是一种以参数形式传递给另一个函数的函数。


AJAX可用来与数据库进行动态通信。


AJAX基于下列核心技术:

XHTML、CSS、DOM、JavaScript、XML、XMLHttpRequest


Ajax的工作原理相当于在用户和服务器之间加了一个中间层-AJAX引擎,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像一些数据验证和简单的数据处理等都交给AJAX引擎自己来做,只有确定需要从服务器读取新数据时再由AJAX引擎代为向服务器提交请求。


Ajax框架分类

客户端框架和服务器端框架

基于客户端浏览器的应用框架一般分为两种:

1、Application Frameworks:

2、Infrastructural Frameworks:

基于服务器端的应用框架通常以下面两种方式工作:

1、HTML/JS Generation

2、远程交互

AJAX入手