菜鸟的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对象。
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包含完整的响应信息。
responseXMLXML响应;Content-Type头部指定MIME(媒体)类型为text/xml,application/xml或以+xml 结尾。
如果Content-Type头部并不包含这些媒体类型之一,那么responseXML的值为null。
statusHTTP状态代码。
仅当readyState值为3(正在接收中)或4(已加载)时,该属性才可用。
当readyState的值小于3时试图存取status的值将引发一个异常。
statusTextHTTP状态的文本;并且仅当readyState值为3或4才可用。
当readyState为其它值时试图存取statusText属性将引发一个异常。
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或4getAllResponseHeaders()该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) {var req = new window.XMLHttpRequest();} else if (window.ActiveXObject) {var req = new window.ActiveXObject('Microsoft.XMLHTTP');}if(!req) return false;req.onreadystatechange = function(){if (req.readyState ==4 && req.status == 200){options.listener.call(req);}};req.open(options.method,options.url,true);return req;}createRequest只接受一个options参数,它是一个对象,返回XMLHttpRequest对象。
参数options可能是这样一个字面量对象:var options = {url:'ajax/strTest.txt',listener:callback,method:'GET'}url表示要请求的文件地址,listener会被作为onreadyStateChange,method作为open的参数。
这个对象比较简单,仅仅是“刚好够用”的程度,应该还需要扩展。