1.前言
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
2.原理
同步:一个任务一个任务连续着干,假如一个页面需求请求很多资源(假设先请求所有用户信息,再请求所有文章),那么就一个请求一个请求地去响应,假设某一个请求需要耗费很长时间,那么整个页面就卡在哪里等着这一个任务地执行了。同步不要单独考虑某个请求完成后页面需要怎样响应,因为是顺序执行的,接下来干什么已经写好了。
异步:同时请求,优点是响应时间快。与同步不同的是,需要单独考虑一个异步请求被响应之后需要做什么后续处理,这个会在回调函数里面写。
AJAX:某一部分的请求是异步响应的,即与主要流程并行,可以部分与服务器交换信息。
3.使用
包括三个主要步骤:创建请求,发生请求,回调函数。
3.1创建 XMLHttpRequest 对象
xmlhttp=new XMLHttpRequest();
3.2向服务器发送请求
xmlhttp.open("GET","ajax_info.txt",true);
三个参数分别是:请求方式,GET/POST;请求内容(页面/函数);是否异步。
xmlhttp.send();
3.2 回调函数
xmlhttp.onreadystatechange=function(){}
函数体里面会写“收到了服务器返回的数据之后,做什么处理”,可以用两种方式响应数据:
responseText 获得字符串形式的响应数据。
responseXML 获得 XML 形式的响应数据。
4.案例
网页页面代码:
一个输入框txt1,通过onkeyup="showHint(this.value)"(onkeyup 事件在用户释放键(在键盘上)时发生)绑定在showHint(this.value)函数上
<form action="">
输入姓名: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>提示信息: <span id="txtHint"></span></p>
在function showHint(str)上,判断当str不为空后。完成异步请求的三个部分,第一是(根据浏览器不同)创建 XMLHttpRequest 对象。
var xmlhttp;
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
第二是写回调函数,操作是在id="txtHint"的位置显示提示信息:
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
第三是写请求的发送。
xmlhttp.open("GET","/try/ajax/gethint.php?q="+str,true);
xmlhttp.send();
注意:数据传输路径是先请求数据,然后发送成功才调用回调函数。但是代码部分回调函数写在前面。