1、曾经一个蛮荒的时代:客户端向服务器的提交只能使用“表单和超链接”,这都会出现页面的重新载入的问题,即时页面只有一点点的改动,也只能全部重来。
2、如果能将与服务器的交互(请求与接收响应)工作,交给一个“对象”,让该对象以一个独立的线程在后台进行如下工作:“请求,等待响应数据,响应服务器的响应,局部修改当前的页面”,此时也就避免了“全部刷新页面”的问题,此种需求即为AJAX背景。
3、这个对象是什么呢?
类名:XMLHttpRequest
生成对象的方法:var xhr= new XMLHttpRequest();
江湖地位:被称为AJAX“引擎”
标准化程度:被目前的主流浏览器接受(包括奇葩IE,但不包括IE6及以前的版本)
请求发送方式:xhr.send();
4、往哪里发送,发送什么东西?
var xhr=new XMLHttpRequest(); //向哪发,发什么? xhr.send(null);
我们需要在发送之前,设置一下工作参数,来描述请求的细节:
xhr.open("GET","url?参数1=值1&参数2=值2");
目前代码如下:
var xhr=new XMLHttpRequest(); xhr.open("GET","url?参数1=值1&参数2=值2"); xhr.send(null);
现在可以向服务器发请求,并携带了参数。
5、服务器的响应数据,要给客户端,如何办呢?
捕捉xhr对象的一个“事件”onreadystatechange,并给其绑定“回调函数”
xhr.onreadystatechange=function(){ //处理代码 }
当服务器有数据响应,xhr对象的readyState就会变化(0-1-2-3-4,最终值为4),而每次变化都会调用“处理代码”,很显然这是不必要的,我们做一下改良,以减少回调的次数。
xhr.onreadystatechange=function(){ if(readyState==4){ //最终处理代码 } }
但是服务器的数据在哪里呢?
在xhr的responseText成员变量当中,这样我们的代码如下改进
xhr.onreadystatechange=function(){ if(readyState==4){ alert(xhr.responseText); } }
6、 以下列出完整的代码及注释
//new 一个xhr对象 var xhr=new XMLHttpRequest(); //设定工作参数 xhr.open("GET","url?参数1=值1&参数2=值2"); //注册回调函数 xhr.onreadystatechange=function(){ if(readyState==4){ alert(xhr.responseText); } } //发送请求 xhr.send(null);