AJAX的快速学习
Asynchronous Javascript And XML,简称AJAX,异步的JS和XML,它不是一种新的技术,只是老技术JS采用新用法
前提:
html、css、javaScript、json
同步请求和异步请求
同步请求,浏览器进行请求之后必须等到服务器返回请求才能进行浏览器的其他操作
异步请求,浏览器返回应答之前也可以进行浏览器其他操作
同步请求,整个页面都会刷新一次
异步请求,局部刷新一次
AJAX的对象
XMLHttpRequest对象,专门用来发送异步请求当然也可以发送同步请求
AJAX代码编写的步骤
-
创建XMLHttpRequest对象
-
注册回调函数
-
建立连接与服务端的连接
-
向服务器发送请求
-
如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:
xmlhttp.open("GET","test1.txt",true); xmlhttp.send();
方法 描述 open(method, url,async) 规定请求的类型、URL以及是否异步处理请求 method :请求的类型GET或POST url:文件在服务器的位置 async:true(异步)false(同步) send(string) 将请求发送到服务器 string:仅用于POST请求 setRequestHeader(header,value) 向请求添加 HTTP 头 header: 规定头的名称 value: 规定头的值
-
-
-
发送数据
var xmlhttp; function ajax_demo(){ //创建对象 if(window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP") } //注册回调函数 xmlhttp.onreadystatechange = function(){ } //建立连接 xmlhttp.open("POST|GET","目标URL",true|false); //发送数据 xmlhttp.send(); }
-
服务器响应:如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性
属性 描述 responseText 获得字符串形式的响应数据。 responseXML 获得 XML 形式的响应数据。
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。
属性 | 描述 |
---|---|
onreadystatechange | 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 |
readyState | 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。 |
0: 请求未初始化 1: 服务器连接已建立 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪 | |
status | 200: “OK” 404: 未找到页面 |
在 onreadystatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务。
当 readyState 等于 4 且状态为 200 时,表示响应已就绪:
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById().innerHTML.responseText;
}
}
使用 Callback 函数
callback 函数是一种以参数形式传递给另一个函数的函数。
如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,并为每个 AJAX 任务调用该函数。
该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相同):
function myFunction()
{
loadXMLDoc("ajax_info.txt",function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}