现在的位置: 首页 > 综合 > 正文

09—Ajax03(返回xml数据)

2013年10月03日 ⁄ 综合 ⁄ 共 3459字 ⁄ 字号 评论关闭

为了更好的理解关于Ajax操作xml的部分,所以下面的程序将通过一个普通的静态的xml文件,来观察一些

ajax中的接受
 xml的返回效果;
范例:有如下的一段xml文件---allarea.xml;
 <?xml version="1.0" encoding="gbk"?>
 <allerea>
  <area>
   <id>1</id>
   <title>北京</title>
  </area>
  <area>
   <id>2</id>
   <title>天津</title>
  </area>
  <area>
   <id>3</id>
   <title>南京</title>
  </area>
 </allerea>
 该xml文件在虚拟目录的项目中;
<html>
<head>
<scripte>
  var xmlHttp;
  var flag=false;
  function createXMLHttp(){
   if(window.XMLHttpRequest){//判断当前使用的浏览器
    xmlHttp=new XMLHttpRequest();//表示是使用的FireFox内核的浏览


    }esle{         //表示使用的是ie浏览器
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   
  function getCity(){
   createXMLHttp();
   xmlHttp.open("POST","allarea.xml");
   xmlHttp.onreadystatechange=getCityCallback;
   xmlHttp.send(null);
  }
  function getCityCallback(){
   if(xmlHttp.readyState==4){
    if(xmlHttp.status==200){
     //取得全部的allarea下的节点
     var

allarea=xmlHttp.responseXML.getElementsByTagName("allarea")[0].childNodes;
     var select =document.getElementById("city");
     select.lenth=1;
     select.option[0].selected=true;
     for(var i=0;i<allarea.length;i++){
      var area=allarea[i];
      var option=document.createElement("option")
      var id=area.getElementsByTagName("id")

[0].firstChild.nodeValue;
      var title=area.getElementsByTagName

("title")[0].firstChild.nodeValue;
      option.setAttribute("value",id);
      option.appendChild(document.createTextNode

(title))
      select.appendChild(option);
     }
    }
  }
  funcition checkForm(){
   return flag;
  }
 </script>
</head>
 <body>
  <form action="regist.jsp" method="post" onsubmit="return checkForm()">
   请选择喜欢的城市:
   <select name="city">
    <option value="0">-请选择城市-</option>
   </select>
   <input type="submit" value="注册">
   <input type="reset" value="重置">
  </form>
 </body>
</html>

虽然是返回了数据,只是所有的数据都是静态的,如果想让数据更有意义,则可以结合DOM
解析完成,如果觉得DOM解析过于麻烦,也可以使用JDOM完成,本次使用DOM解析完成操作;

创建一个servlet:
package city.lid.servlet;
import java.sql.*;
import java.io.*;
import org.w3c.dom.*;//导入DOM操作的包
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CheckServlet extends HttpServlet{
 
 public void doGet(HttpServletRequest request,HttpServletResponse response) throws

ServletException,IOException{
  this.doPost(request,response);
  }
 public void doPost(HttpServletRequest request,HttpServletResponse response) throws

ServletException,IOException{
  response.setContentType("text/xml;charset=GBK");
  PrintWriter out=response.getWriter();
  ByteArrayOutputStream bos=new ByteArrayOutputStream();
  try{
   DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
   DocumentBuilder builder=factory.newDocumentBuilder();
   Document doc =builder.newDocument() ;
   String data[]={"北京","南京","济南",};
   Element allarea=doc.createElement("allarea");
   for(int x=0;x<data.length;x++){
    Element area=doc.createElement("area");
    Element id=doc.createElement("id");
    Element title=doc.createElement("title");
    id.appendChild(doc.createTextNode(""+(x+1)));
    title.appendChild(doc.createTextNode(data[x]));
    area.appendChild(id);
    area.appendChild(title);
    area.appendChild(area);
    }
    doc.appendChild(allarea);
    TransformerFactory tf=TransformerFactory.newInstance();
    Transformer t=tf.newTransformer();
    t.setOutputProperty(OutputKeys.ENCODING,"GBK");
    DOMSource source=new DOMSource();
    StreamResult result=new StreamResult(bos);
    t.transform(source,result);
    out.println(doc);
   }
  catch(Exception e){
   }
  
  }
 }
在web.xml中配置该servlet;

抱歉!评论已关闭.