一、由于XMLHttpRequest不是一个W3C标准,所以可以采用多种方法使用JavaScript来创建XMLHttpRequest的实例。IE把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如FireFox,Safari和Opera)把它实现为一个本地JavaScript对象。由于存在这些差别,JavaScript代码中必须包含有关的逻辑,从而使用ActiveX或者使用本地JavaScript对象技术来创建XMLHttpRequest的一个实例。
二、标准XMLHttpRequest操作
abort():停止当前请求;
getAllResponseHeaders():把HTTP请求的所有的响应首部作为键/值对返回;
getResponseHeader(STring header):返回指定首部的串值;
open(String method,String url,boolean asynch,String username,String password):建立对服务器的调用,method可以是get,pos或put。url参数可以是相对url或绝对url,后面三个参数是可选的。asynch表示这个调用是异步的还是同步的,默认是true,表示请求本质上是异步的,如果这个参数为false,处理就会等待,直到从服务器返回响应为止。由于异步调用是使用Ajax的主要优势之一,所以倘若将这个参数设置为false,从某种程度上讲与使用XMLHttpRequest对象的初衷不太相符。不过,在某些情况下设置这个参数为false也是有用的,比如在持久存储页面之前可以先验证用户的输入。最后两个参数允许指定一个特定的用户名和密码。
void send(content):这个方法具体想服务器发出请求,如果请求声明为异步的,这个方法就会立即返回,否则它会等待直到结束到响应为止。可选参数可以是DOM对象的实例,输入流,或者串。传入这个方法的内容会作为请求体的一部分发送。
void setRequestHeader(String header,String value):这个方法为HTTP请求中一个给定的首部设置值。注意,这个方法必须在调用open()之后才能调用。
String getAllResponseHeaders():这个方法返回一个串,其中包含HTTP请求的所有首部,包括Content-Length、date和url。
三、标准XMLHttpRequest属性
onreadystatechange:每个状态改变时都会触发这个事件器,通常会调用一个javaScript函数;
readyState:请求的状态。有5个可选值:0=未初始化,1=正在加载,2=已加载,3=交互中,4=完成;
responseText:服务器的响应,表示为一个串;
responseXMl:服务器的响应,表示为XML,这个对象可以解析为一个DOM对象;
status:服务器的HTTP状态码(200对应OK,404对应Not Found(未找到),等等);
statusText:HTTP状态码的相应文本(OK或Not Found等等);
四、用于处理XML文档的DOM元素属性
childNodes:返回当前元素的所有子元素的数组;
firstChild:返回当前元素的第一个下级子元素;
lastChild:返回当前元素的最后一个子元素;
nextSibling:返回当前元素后面的元素(下一个兄弟);
nodeValue:指定表示元素值的读/写属性;
parentNode:返回当前元素的父节点;
previousSibling:返回当前元素的前一个元素(前一个兄弟);
五、用于遍历XML文档的DOM元素方法
getElementById(id):获取有唯一ID属性值文档中的元素;
getElementsByTagName(name):返回当前元素中有指定标记名的子元素的数组;
hasChildNodes():返回一个布尔值,表示元素是否还有子元素;
getAttribute(name):返回元素的属性值,属性有name指定;
六、动态创建内容时常用到的DOM属性和方法
document.createElement(tageName):创建由tagName指定的元素;
document.createTextNode(text):创建一个包含静态文本的节点;
<element>.appendChild(childNode):给当前元素增加一个子节点;
<element>.getAttribute(name):获取name属性;
<element>.setAttribute(name,value):设置name属性的值;
<element>.insertBefore(newNode,targetNode):把节点newNode作为当前元素的子节点插入带targetNode元素的前面
<element>.removeAttribute(name):这个方法从元素中删除属性name;
<element>.removeChild(childNode):删除子元素;
<element>.replaceChild(newNode,oldNode):替换节点;
七、判断IE浏览器
IE能识别出名为uniqueID的document对象的专用属性,IE也是唯一能识别这个属性的浏览器,所以使用这个属性可以确定浏览器,例如:
if(document.uniqueID){//IE
var radioButton=document.createElement("<input type='radio' name='radioButton' value='checked'>");
}
else{
var radioButton=document.createElement("input");
radioButton.setAttribute("type","radio");
radioButton.setAttribute("name","radioButton");
radioButton.setAttribute("value","checked");
}
八、Struts+AJAX实例:
1、简单的返回文本
Struts端:(页面JS端读取responseText)
/**
* 检测VIP客户网址
* (-2:处理出错,-1:没有数据,0:有客户数据且不是VIP,1:已经是VIP)
*/
public void checkVipuser(ActionMapping actionMapping,ActionForm actionForm,HttpServletRequest request,
HttpServletResponse response) {
PrintWriter out=null;
int result=-2;
try{
out = response.getWriter();
String weburl=request.getParameter("weburl");
//后台处理(省略)
out.print(result);
out.flush();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
2、返回XML
Struts端:(页面JS端读取responseXML)
public void searchEmployee(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequestrequest,HttpServletResponseresponse){
response.setContentType("text/xml;charset=utf-8");
PrintWriterout=null;
try{
out=response.getWriter();
out.print("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");
out.print("<rootnode>");
out.print("<pro1='valu1' pro2='valu2' pro3='valu3' pro4='valu4'/>");
out.print("</rootnode>");
out.flush();
out.close();
}catch(Exceptione){
e.printStackTrace();
out.print("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");
out.flush();
out.close();
}
}
posted on 2007-05-30 16:24
破茧而出 阅读(454)
评论(0) 编辑 收藏 所属分类:
AJAX