闲话日常
在日常的项目使用中,关于AJAX,更多的是对整体的CtrlC+CtrlV,然后进行部分参数的更改,然后去操作success函数即可,然而,目前的要求已经不仅仅局限于使用了,更多的是知识的理解程度和模块化。这篇文章主要针对自身对ajax的学习和理解,做一个总结,以及对代码的一个封装。
啥是AJAX
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。什么意思呢,也就是说不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容,也是他最大的优势所在,而且ajax不是新的编程语言,而是一种使用现有标准的新方法。也可以说ajax是一种创建快速动态网页的技术。
咋用了
AJAX的工作原理按照口头的话来总结,也就是说:在客户端(Broswer)创建XMLHttpRequest对象,通过地址、数据、请求方式等参数配合发送请求(HttpRequest);而Server服务端对请求进行处理,创建一个Response,并且向客户端返回数据;然后在客户端进行数据的处理,进而去更新页面的内容。如图所示:
创建XMLHttpRequest对象
创建XMLHttpRequest对象,现在的浏览器均支持 XMLHttpRequest 对象。XMLHttpRequest 用于在后台与服务器交换数据。而在IE5 和 IE6 中使用 ActiveXObject来进行。
创建 XMLHttpRequest 对象的语法:
variable=new XMLHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:
variable=new ActiveXObject("Microsoft.XMLHTTP");
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
var xmlhttp;
if (window.XMLHttpRequest)
{
// 新版本浏览器
xmlhttp=new XMLHttpRequest();
}else{
// IE6,IE5等旧版本浏览器
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
向服务器发送请求
XMLHttpRequest对象用于和服务器交换数据,如果需要将请求发送到服务器,我们需要使用 XMLHttpRequest 对象的 open() 和 send() 方法,下面介绍一下两个方法:
open():
open(method,url,async),用于规定请求的类型、URL 以及是否异步处理请求。
method:表示请求的类型,get或post方法等。
url:文件在服务器的位置,请求的连接(接口)。
async:通过布尔值表示是否同步。(true:异步,false:同步)
send() :
send(string),将请求发送到服务器。
string:仅用于post请求。
下面分别说一下open的几个参数:
method:
get:大部分情况下均能够使用,而且更加简单快捷。
post:保密性较好,需要发送大量数据时建议使用。
url:
open() 方法的 url 参数是服务器上文件的地址(没太理解清楚,求大佬指点,只能比着搜索结果粘下来了)
async:
当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//操作
}
}
xmlhttp.open("GET","URL",true);
xmlhttp.send();
不推荐使用false,除非是特别小的请求,因为使用false(同步)的话,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。
服务器的响应
要想获得来自服务器的响应,就得使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性,看名字就能知道意思, responseText 就是说获得字符串形式的响应数据,而 responseXML 指获得 XML 形式的响应数据。如果来自服务器的响应并非 XML,请使用 responseText 属性,如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 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;
readystate
当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件,readyState 属性存有 XMLHttpRequest 的状态信息。下面是 XMLHttpRequest 对象的三个重要的属性:
onreadystatechange:
存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
readyState:
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
1、请求未初始化
2、服务器连接已建立
3、请求已接收
4、 请求处理中
5、请求已完成,且响应已就绪
status:
200: "OK"
404: 未找到页面
在readyState的值发生改变时,就会触发onreadystatechange函数,一般情况下会在函数内部去做判断,当readyState的值为4,且status的值为200时表示响应已就绪。
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//一系列操作
}
}