菜鸟的Ajax笔记
- 格式:doc
- 大小:53.50 KB
- 文档页数:12
菜鸟的Ajax笔记——简介Ajax的主要作用就是不刷新页面更新页面的内容,也就是异步传输。Ajax的百度百科。用来显示Ajax响应的div。Ajax听起来很厉害,但是用起来其实很简单。下面就是一段使用Ajax的简单示例。
function ajaxRequest(){
var req = false;
if(window.XMLHttpRequest) {
var req = new window.XMLHttpRequest();
} else if (window.ActiveXObject) {
var req = new window.ActiveXObject('Microsoft.XMLHTTP');
}
if(!req) return false;
req.onreadystatechange = callback;
req.open('GET','ajax/ajaxTest.txt',true);
req.setRequestHeader('Accept-Language','zh-cn');
req.send(null);
function callback(){
switch (req.readyState) {
case 1:
//alert('Loading');
break;
case 2:
//alert('loaded');
break;
case 3:
//alert('Interactive');
break;
case 4:
if (req.status && req.status == 200){
var str = req.responseText;
document.getElementById('test').innerHTML =
str;
}
break;
}
}
}
function addEventSimple(obj,evt,fn){
if(obj.addEventListener){
obj.addEventListener(evt,fn,false);
}else if(obj.attachEvent){
obj.attachEvent('on'+evt,fn);
}
}
addEventSimple(document,'dblclick',ajaxRequest);
代码的最后部分给document添加一个双击的响应函数,当文档被双击的时候就调用ajaxRequest函数,也就是负责发送Ajax请求的函数。
ajaxRequest函数中,第一步就是创建一个XMLHttpRequest对象,代码如下,由于IE和其它浏览器支持的方式不太一样,所以会试图使用使用两个方法来创建这个对象。 var req = false;
if(window.XMLHttpRequest) {
var req = new window.XMLHttpRequest();
} else if (window.ActiveXObject) {
var req = new window.ActiveXObject('Microsoft.XMLHTTP');
}
if(!req) return false;
第二步是设置XMLHttpRequest对象的状态变化响应函数。
req.onreadystatechange = callback;
下面是发送Ajax请求了。
req.open('GET','ajax/ajaxTest.txt',true);
req.send(null);
最后就可以编写状态变化响应函数了:
function callback(){
switch (req.readyState) {
case 1:
//alert('Loading');
break;
case 2:
//alert('loaded');
break;
case 3:
//alert('Interactive');
break;
case 4:
if (req.status && req.status == 200){
var str = req.responseText;
document.getElementById('test').innerHTML = str;
}
break;
}
}
函数的作用就是将返回的字符串添加到页面开头id为test的div内。双击这个文档就可以看到效果。XMLHttpRequest对象Ajax的核心就是XMLHttpRequest对象。 XMLHttpRequest对象的属性
readyState
表示XMLHttpRequest对象的当前状态,可取值为0-4,共5个状态。
0 :"未初始化"状态;此时,已经创建一个XMLHttpRequest对象,但是还没有初始化。
1 :"发送"状态;此时,代码已经调用了XMLHttpRequest open()方法并且XMLHttpRequest已经准备好把一个请求发送到服务器。
2 :"发送"状态;此时,已经通过send()方法把一个请求发送到服务器端,但是还没有收到一个响应。
3 :"正在接收"状态;此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束。
4 :"已加载"状态;此时,响应已经被完全接收。
onreadystatechange
当readyState属性变化的时候会调用的函数。
responseText
响应的文本内容。当 readyState值为0、1或2时,responseText包含一个空字符串。当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。当readyState为4(已加载)时,该responseText包含完整的响应信息。
responseXML
XML响应;Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾。如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。
status
HTTP状态代码。仅当readyState值为3(正在接收中)或4(已加载)时,该属性才可用。当readyState的值小于3时试图存取status的值将引发一个异常。
statusText
HTTP状态的文本;并且仅当readyState值为3或4才可用。当readyState为其它值时试图存取statusText属性将引发一个异常。 XMLHttpRequest对象的方法
abort()
取消当前请求。把XMLHttpRequest对象复位到未初始化状态。
open()
open(method,url,async,username,password)
方法初始化一个XMLHttpRequest对象。
method参数是必须提供的-用于指定你想用来发送请求的HTTP方法 (GET,POST,PUT,DELETE或HEAD)。
url参数用于指定XMLHttpRequest对象把请求发送到的服务器相应的URL。
async参数为布尔值,指定请求是否异步,默认值为true,即异步。
该方法把XMLHttpRequest对象的readyState属性设置为1。
setRequestHeader()
setRequestHeader(header,value)
设置请求的头部信息。必须在调用open()方法后调用这个方法(当readyState值为1时)。
send()
send([content])
把请求发送到服务器。
content函数可选,是要发送到服务器的内容,通常在POST方法的时候使用。
该方法把XMLHttpRequest对象的readyState属性的值设置为2。
getResponseHeader()
getResponseHeader(header,value)方法用于检索响应的头部值。仅当readyState值是3或4
getAllResponseHeaders()
该getAllResponseHeaders()方法以一个字符串形式返回所有的响应头部。处理Ajax响应1——innerHTML学会了Ajax的核心,再来做几个例子,使用innerHTML将服务器响应的内容添加到页面,响应的格式是纯文本,也就是使用XMLHttpRequest对象的responseText属性。效果如下,只要点击那几个按钮就可以分别向服务器发送三个不同的Ajax请求。
用Ajax请求段文字用Ajax请求一个table用Ajax从豆瓣取得封面图片
JavaScript代码分析
首先,这个需要发送三次请求,所以我们把可以重用的代码编写到一个函数中,这个函数的任务就是设置XMLHttpRequest对象,初始化必要的属性。代码很大程度上参考了《Ajax基础教程》和《AdvancED DOM Scripting》。
function createRequest(options){
var req = false;
if(window.XMLHttpRequest) {