日期:2014-05-16  浏览次数:20708 次

(100分):为什么Ajax获得的XML数据为null - Web 开发 / Ajax
Ajax调用服务器JSP代码执行读取xml文件的数据并返回。
但Ajax的回调函数中xmlHttp_main.responseXML的值为null, xmlHttp_main.responseTEXT却有值,为什么我返回的xml不能出现在responseXML; 
如果我只是简单的返回一个测试的XML数据,却可以从responseXML中获取到:
Java code

String   strxml= "<?xml version=\"1.0\"  encoding=\"UTF-8\"?>"; 
    strxml=strxml+ "<message><info>not file data! </info></message>";
    //response.getWriter().write(strxml); 





以下是:main.jsp/main.xml/main.html中的内容:



main.jsp代码:
Java code

<%@ page contentType="text/html; charset=GBK"%> 
<%@ page import="java.io.*" %>
<%
String filename = request.getRealPath("main.xml");
java.io.File f = new java.io.File(filename);
if (f.exists())
{
    int length = 0;    
    char [] buffer = new char[1024];
    //out.write(buffer, 0, 1024);
    
    java.io.FileReader fr = new java.io.FileReader(f);
    length = fr.read(buffer);
    
    response.setContentType( "text/xml; charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");    
    response.getWriter().write(buffer);
    fr.close();
    
    String   strxml= "<?xml version=\"1.0\"  encoding=\"UTF-8\"?>"; 
    strxml=strxml+ "<message><info>not file data! </info></message>";
    //response.getWriter().write(strxml); 
}
else
{
    out.write("File isn't exist!");
}
%>



main.xml文件内容:
XML code

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <rid> RoadId: 1029</rid>
    <speed> Speed: 85.29</speed>
    <status> status: 2</status>
    <info> info: Blocked</info>
</note>



JScript code

function stateChanged() 
{ 
  if (xmlHttp_main.readyState==4 && xmlHttp_main.status==200)
  { 
    var txt,x,i;
        txt="";
    xmlDoc=xmlHttp_main.responseXML;        
    if(xmlDoc != null)
        alert("xml:---"+xmlDoc);

    x=xmlDoc.getElementsByTagName("info");
    txt=txt+x[0].firstChild.nodeValue+"<br />";

         document.getElementById("txtHint").innerHTML=txt;

  }
}



------解决方案--------------------
1.服务器端安装xml解析了没
2.出错处理那个地方的输出应该也是个xml节,不应该是 out.write("File isn't exist!");
应该是这样out.write("<err>File isn't exist!</err>");
你这个情况需要查看下ResponseText,看看xml串是否正确

------解决方案--------------------
单独访问main.jsp看下输出对不对?
一次只是读取一个 buffer的字节数, 一般循环读完文件
------解决方案--------------------
你的url直接请求xml文件就可以了。

如果需要java处理,确保你设置response.setContentType("text/xml")
确保输出的是合法的xml格式。

你可以在浏览器里面输入的你的jsp地址测试得到的是否是合法的xml
------解决方案--------------------
兼容IE、Firefox、Chrome、Safari、Opera 等浏览器的XML 文件加载
------解决方案--------------------
不会是文件木有找到吧!