- 生成一次请求
要生成一次请求,要通过浏览器能力检测来实例化一个新对象,并调用open()和send()方法:function stateChangeListener() { //Some Codes } var request=false; if(window.XMLHttpRequest) { request=new window.XMLHttpRequest(); } else if(window.ActiveXObject) { request=new window.ActiveXObject("Microsoft.XMLHTTP"); } if(request) { request.onreadystatechange=stateChangeListener; request.open('GET','/your/script/hellp.ashx?p1=value1&p2=value2',true); request.send(null); }
对于GET请求,方法send的参数应该为null。如果要执行一次POST请求,那么应该讲POST作为方法open的第一个参数,并通过send()方法在请求主体中包含传入变量,而不是包含在URL中:
request.open('POST','/your/script/hellp.ashx',true); request.send(‘p1=value1&p2=value2’);
-
处理响应
前面为请求对象的onreadystatechange属性指定了stateChangeListener()方法,该方法会在不同的阶段被调用几次,这个方法可以通过访问下列XMLHttpRequest对象的属性来与请求进行交互。
○ readyState是一个表示下列状态的整数值:
■ 0:尚未初始化
■ 1:载入中
■ 2:载入完成
■ 3:交互
■ 4:交互完成
○ responseText是一个响应中返回的字符串
○ responseXML是一个兼容DOM核心的文档对象
○ status是一个表示请求状态的数字代码。(HTTP状态协议代码)
○ statusText是与状态代码相关的一条信息。
○ onreadystatechange是一个在不同的请求阶段被执行的方法。
实现前一步中的stateChangeListener:
function stateChangeListener() { switch(request.readyState) case 1: //载入中 break; case 2: //载入完成 break; case 3: //交互 break; case 4: //完成 if(request.status==200) { //对request.responseText或者request.responseXML进行处理 } else { //对request.status或者request.statusText进行处理 } break; }
当通过XMLHttpRequest来发起Ajax异步调用的时候,返回的结果必须通过onreadystatechange来调用,下面的代码是不能按照计划运行的:
request.open('GET','/your/script/hellp.ashx?p1=value1&p2=value2',true); request.send(null); alert(request.responseText);
因为发起请求的模式是异步的,open()函数的第三个参数为true,当XMLHttpRequest处于异步模式时,请求会被异步发送,因此alert可能会在响应之前被执行(显示一个空值)。