ITPub博客

首页 > Linux操作系统 > Linux操作系统 > AJAX 中getElementsByTagName("ans")的结果长度总是为0的原因

AJAX 中getElementsByTagName("ans")的结果长度总是为0的原因

原创 Linux操作系统 作者:icer_repls 时间:2011-06-11 23:43:14 0 删除 编辑
    一个很简单的ajax应用,就是我单击一个按钮时,转到另一个页面去处理一些业务逻辑(不想用直接的页面跳转,用ajax异步处理更好),然后返回一个处理结果
然后就出现了下面问题:
function callback()
{
if(req.readyState == 4)
{
if(req.status == 200)
{
var msg = req.responseText;
alert(msg);

if(msg != "")
{

//得到一个responseXML
//请注意这里不是req.responseXML.documentElement!!!!!!!!
var xmlDoc = req.responseXML;
alert(xmlDoc);
var ansTag = xmlDoc.getElementsByTagName("ans");
alert(ansTag.length);
  
alert(ansTag[0].childNodes[0].nodeValue);
}
}
}
}
我通过alert(msg)红色部分查看到了一个完整的xml文件,里面确实有名为ans的结点
但是我alert(ansTag.length);蓝色部分时,长度老是为0
我同时alert(xmlDoc)粉色部分,不为null 确实是一个object
我就想不明白这是为什么那个长度老是为0。请问谁帮我解决这个问题吗?

一并附上我那个处理业务逻辑的页面(即提供返回值的那个页面(已经将业务逻辑部分省略,简单提供返回值))
<!-- 必须加上xml的头,因为我们等下要利用处理xml文件的api来读取xml文件,因而要声明为xml文件 -->

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
response.setContentType("text/xml");
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires", 0);
int ans = 12;
String msg = ""+ans+"";
out.print(msg);
%>

我alert responseText时的结果也附上:
<!-- 必须加上xml的头,因为我们等下要利用处理xml文件的api来读取xml文件,因而要声明为xml文件 -->

12

---------上面是我遇到问题的描写(在csdn上发过帖子求助)-------
 
后来一个朋友利用firebug(第一次听过这个调试工具,听说调试js蛮不错的)。调试出来了,在一个xml文件中,第一行必须是xml的头,也就是必须是 。我当初也是好意,在第一行写个注释,结果花费了我几个小时的时间。 这只是一个很小的错误而已,但同时也很难调试出来,供大家参考!
    最后我们应该认识到以后遇到这个问题时,基本上都会是xml文件出问题了(在我这个案例是xml文件头得位置不对),以后可能就是其他的原因,反正对根结底,遇到这种情况时,先仔细检查自己生成的xml文件是否绝对的正确!要知道js的调试很困难,一定要仔细!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25701553/viewspace-697692/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-04-16

  • 博文量
    20
  • 访问量
    65191