通过上一讲的介绍,我们已经了解了Ajax和Ajax所使用的技术,下面我将介绍应用Ajax如何与服务器通信。
一、发送请求
Ajax可以通过XMLHttpRequest对象实现采用异步方式在后台发送请求。通常情况下,Ajax发送请求有两种,GET请求和POST请求。无论发送哪种请求,都需要经过一下4个步骤。
1)初始化XMLHttpRequest对象。为了提高程序的兼容性,需要创建一个跨浏览器的XMLHttpRequest对象,并且判断XMLHttpRequest对象的实例化是否成功,如果不成功,则给予提示。具体代码如下:
http_request = false;
if(window.XMLHttpRequest){
http_request = new XMLHttpRequest();
}else if(window.ActiveXObject){
try{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
http_request = newActiveXObject("Microsoft.XMLHTTP");
}catch(e){}
}
}
if(http_request){
alert("不能创建XMLHttpRequest实例!");
return false;
}
2)为XMLHttpRequest对象指定一个返回结果处理函数(即回调函数),用于对返回结果进行处理。具体代码如下:
http_request.onreadystatechange = getResult;
http_request.onreadystatechange = function(){
getResult(param);
};
3)创建一个与服务器的连接。在创建时,需要指定发送请求的方式(即GET或POST),以及设置是否采用异步方式发送请求。
例1:异步方式发送GET请求:
http_request.open('GET',url,true);
例2:异步方式发送POST请求:
http_request.open('POST',url,true);
小技巧:在指定URL参数时,最好讲一个时间戳追加到该URL参数的后面,这样可以防止因浏览器缓存结果而不能实时得到最新的结果。例如,可以指定URL参数为以下代码:
String url = "deal.jsp?nocache="+new Date().getTime();
4)向服务器发送请求。XMLHttpRequest对象的send()方法可以实现向服务器发送请求,该方法需要传递一个参数,如果发送的是一个GET请求,可以将该参数设置为null;如果发送的是POST请求,可以通过该参数指定要发送的请求参数。
例1:向服务器发送GET请求的代码如下:
http_request.send(null);
例2:向服务器发送POST请求的代码如下:
var param = "user="+form1.user.value + "&pwd="+form1.pwd.value;//组合参数
http_request.send(param);
http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
上面这句代码,需要添加在send()语句之前。
二、处理服务器响应
当向服务器发送请求后,接下来就需要处理服务器响应。在向服务器发送请求时,需要通过XMLHttepRequest对象的onreadystatechange属性指定一个回调函数,用于处理服务器响应。在这个回调函数中,首先需要判断服务器的请求状态,保证请求已经完成;然后再根据服务器的HTTP状态码,判断服务器对请求的响应是否成功(具体数值表示的含义详见上一讲),如果成功,则获取服务器的响应反馈给客户端。
XMLHttpRequest对象提供了两个用来访问服务器响应的属性,一个是responseText属性,返回字符串响应;另一个是responseXML属性,返回XML响应。
1、处理字符串响应
字符串响应通常应用在响应不是特别复杂的情况下。例如,将响应显示在提示对话框中,或者响应只是显示成功或失败的字符串。现在流行的数据交互格式json,本质上也是字符串,后续为大家详细解读json。
例:将字符串响应显示到提示对话框中的回调函数的具体代码如下:
function getResult(){
if(http_request.readyState==4){ //判断请求状态
if(http_request.status==200){ //请求成功,开始处理返回结果
alert(http_request.responseText);
}else{
alert("您所请求的页面有错误!");
}
}
}
document.getElementById("div_result").innerHTML=http_request.responseText;
2、处理XML响应
如果在服务器端需要生成特别复杂的响应,那么就需要应用XML响应。应用XMLHttpRequest对象的responseXML属性,可以生成一个XML文档,而且当前浏览器已经提供了很好的解析XML文档对象的方法。
例:保存图书信息的XML文档。具体代码如下:
Java Web开发宝典
人民邮电出版社
Java开发宝典
机械工业出版社
function getResult(){
if(http_request.readyState==4){ //判断请求状态
if(http_request.status==200){ //请求成功,开始处理返回结果
var xmldoc = http_request.responseXML;
var str = "";
for(i=0;i";
}
document.getElementById("book").innerHTML=str; //显示图书信息
}else{
alert("您锁清秋的页面有错误!");
}
}
}
《Java Web开发宝典》由“人民邮电出版社”出版
《Java开发宝典》由“机械工业出版社”出版