Struts2的ACTION中我生成了XML各式,并通过 out.write传到页面HttpServletResponse response = (HttpServletResponse)ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_RESPONSE); 
response.reset();
response.setContentType("text/xml;charset=utf-8"); PrintWriter out = response.getWriter();
 
 String strHtmlText = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n";
 strHtmlText +="<site_xml>\r\n";
 strHtmlText +="<data>\r\n";
 strHtmlText +="<row>\r\n";
 strHtmlText +="  <col0>26</col0>\r\n";
 strHtmlText +="  <col1>192.168.1.26</col1>\r\n";
 strHtmlText +="  <col2>对象类型26</col2>\r\n";
 strHtmlText +="</row>\r\n";
 strHtmlText +="<row>\r\n";
 strHtmlText +="  <col0>27</col0>\r\n";
 strHtmlText +="  <col1>192.168.1.27</col1>\r\n";
 strHtmlText +="  <col2>对象类型27</col2>\r\n";
 strHtmlText +="</row>\r\n";
 strHtmlText +="<row>\r\n";
 strHtmlText +="  <col0>28</col0>\r\n";
 strHtmlText +="  <col1>192.168.1.28</col1>\r\n";
 strHtmlText +="  <col2>对象类型28</col2>\r\n";
 strHtmlText +="</row>\r\n";
 strHtmlText +="</data>\r\n";
 strHtmlText +="</site_xml>\r\n"; out.write(strHtmlText);
 前台JSP页面<script language="JavaScript"  type="text/javascript">
function doInit(){
var reqXML=createXMLHttp();
if(reqXML){   
reqXML.onreadystatechange=function(){   
  if(reqXML.readyState==4){      
  if(reqXML.status==0 || reqXML.status==200){      
var resultM=reqXML.responseXML;
alert(resultM);

var site_xml = resultM.getElementsByTagName("site_xml").length;
alert(site_xml);//此处得出的结果是零,应该是1的   

}
  }
};

reqXML.open("post", "myAction.action", false);
reqXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); 
reqXML.send(); 
}
}
</script>为什么我生成的XML各式的字符串在前台打不出来呢?
reqXML.responseText打出的结果不是XML各式字符串,而是将我的JSP页面所有内容都打出。
reqXML.responseXML;打出的对象结果虽然不为空,但通过resultM.getElementsByTagName("site_xml").length;解析的时候值为零,应该为1的啊

解决方案 »

  1.   

    struts2 中,action里的变量,在JSP中直接可以获取到吧(变量名要一致)。为什么要要用异步方式传呢,有特殊需求?
      

  2.   

    直接获取到的结果不是XML格式的啊。
      

  3.   

    直接获取到的结果是28 6 6 5 5 6 26 192.168.1.26 对象类型26 27 192.168.1.27 对象类型27 28 192.168.1.28 对象类型28 ,而不是XML格式啊
      

  4.   

    var resultM= reqXML.responseXML.getElementsByTagName('data');
      

  5.   

    我的“reqXML”已经包含“responseXML”对象了
      

  6.   

    var site_xml = resultM.getElementsByTagName("data").length; 
      

  7.   


    在struts2中我已经定义了全局变量strHtmlText,并且有set,get方法。但我如何将获取到的值赋给js文件中的变量呢?我将var resultM=reqXML.responseXML; 更改为var resultM=<%=(String)request.getAttribute("strHtmlText")%>但这么做的是错误的,而且
    request.getAttribute("strHtmlText")%>得出的值日时除去XML格式的值,即28 6 6 5 5 6 26 192.168.1.26 对象类型26 27 192.168.1.27 对象类型27 28 192.168.1.28 对象类型28
      

  8.   

    out.write(strHtmlText); 
    把这个改成out.println(strHtmlText);试试看
      

  9.   

    但我如何将获取到的值赋给js文件中的变量呢?var resultM='<s:property value="strHtmlText"/>';
    试试!如果你要用<%=(String)request.getAttribute("strHtmlText")%>
    那在action中就需要显示的写出ServletActionContext.getRequest().setAttribute("strHtmlText",strHtmlText);
      

  10.   

    out.write(strHtmlText); 
    在这之后有个out.close();即可。谢谢大家了,呵呵。给分。